annoworkapi.resource のソースコード

import logging
import netrc
import os
from typing import Optional
from urllib.parse import urlparse

from annoworkapi.api import DEFAULT_ENDPOINT_URL, AnnoworkApi
from annoworkapi.exceptions import CredentialsNotFoundError
from annoworkapi.wrapper import Wrapper

logger = logging.getLogger(__name__)


[ドキュメント] class Resource: """ Args: login_user_id: ログインするときのユーザID login_password:ログインするときのパスワード endpoint_url: annoworkのendpointであるURL """ def __init__(self, login_user_id: str, login_password: str, *, endpoint_url: str = DEFAULT_ENDPOINT_URL) -> None: self.api = AnnoworkApi(login_user_id=login_user_id, login_password=login_password, endpoint_url=endpoint_url) self.wrapper = Wrapper(self.api) logger.debug("Create annoworkapi resource instance :: %s", {"login_user_id": login_user_id, "endpoint_url": endpoint_url})
[ドキュメント] def build_from_netrc(*, endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource: """ ``.netrc`` ファイルから、Resourceインスタンスを生成する。 """ try: netrc_hosts = netrc.netrc().hosts except FileNotFoundError as e: raise CredentialsNotFoundError("`.netrc`ファイルが存在しません。") from e annowork_hostname = (urlparse(endpoint_url)).hostname if annowork_hostname not in netrc_hosts: raise CredentialsNotFoundError(f"`.netrc`ファイルの`machine`にAnnoworkのドメイン'{annowork_hostname}'が存在しません。") host = netrc_hosts[annowork_hostname] login_user_id = host[0] login_password = host[2] if login_user_id is None or login_password is None: raise CredentialsNotFoundError("`.netrc`ファイルに、AnnoworkのユーザーIDまたはパスワードが記載されていません。") return Resource(login_user_id, login_password, endpoint_url=endpoint_url)
[ドキュメント] def build_from_env(*, endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource: """ 環境変数 ``ANNOWORK_USER_ID`` , ``ANNOWORK_PASSWORD`` から、Resourceインスタンスを生成する。 Args: endpoint_url: APIのエンドポイント。 Returns: Resourceインスタンス """ login_user_id = os.environ.get("ANNOWORK_USER_ID") login_password = os.environ.get("ANNOWORK_PASSWORD") if login_user_id is None or login_password is None: raise CredentialsNotFoundError("環境変数`ANNOWORK_USER_ID`か`ANNOWORK_PASSWORD`のいずれかが空です。") return Resource(login_user_id, login_password, endpoint_url=endpoint_url)
[ドキュメント] def build( *, login_user_id: Optional[str] = None, login_password: Optional[str] = None, endpoint_url: str = DEFAULT_ENDPOINT_URL, ) -> Resource: """ ``.netrc`` ファイルまたは環境変数から認証情報を取得し、Resourceインスタンスを生成します。 netrc, 環境変数の順に認証情報を読み込みます。 """ if login_user_id is not None and login_password is not None: return Resource(login_user_id, login_password, endpoint_url=endpoint_url) elif login_user_id is None and login_password is None: try: return build_from_env(endpoint_url=endpoint_url) except CredentialsNotFoundError: try: return build_from_netrc(endpoint_url=endpoint_url) except CredentialsNotFoundError as e: raise CredentialsNotFoundError("環境変数または`.netrc`ファイルにAnnowork認証情報はありませんでした。") from e else: raise ValueError("引数`login_user_id`か`login_password`のどちらか一方がNoneです。両方Noneでないか、両方Noneである必要があります。")