Skip to content

Commit 8f044b8

Browse files
committed
Patをcredentialsに利用する場合のtokensへの転写をコンストラクタではなくリクエストを実行する直前に行うようにした
1 parent 471e243 commit 8f044b8

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

annofabapi/api.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ def __init__(self, credentials: Union[IdPass, Pat], *, endpoint_url: str = DEFAU
257257
self.url_prefix = f"{endpoint_url}/api/v1"
258258
self.session = requests.Session()
259259

260-
self.tokens: Union[Tokens, Pat, None] = None if isinstance(credentials, IdPass) else credentials
260+
self.tokens: Union[Tokens, Pat, None] = None
261261

262262
self.cookies: Optional[RequestsCookieJar] = None
263263

@@ -497,6 +497,12 @@ def _request_wrapper(
497497
else:
498498
url = f"{self.url_prefix}{url_path}"
499499

500+
# patを使う場合は最初にtokensをセットする
501+
# def logoutの呼び出しでtokensがNoneになった後にAPIを呼び出しても問題ないように(IdPassの場合も、自動loginしているので、その代わり)
502+
# IdPassと同じ処理に合流させてしまうと、patが無効なときに無限ループしてしまうので、ここで1回だけ呼び出す
503+
if self.tokens is None and isinstance(self.credentials, Pat):
504+
self._login_pat(self.credentials)
505+
500506
kwargs = self._create_kwargs(query_params, header_params, request_body)
501507
response = self.session.request(method=http_method.lower(), url=url, **kwargs)
502508
# response.requestよりメソッド引数のrequest情報の方が分かりやすいので、メソッド引数のrequest情報を出力する。
@@ -674,13 +680,13 @@ def login(self, mfa_code: Optional[str] = None) -> None:
674680
MfaEnabledUserExecutionError: ``self.input_mfa_code_via_stdin`` が ``False`` AND ``mfa_code`` が未指定の場合
675681
"""
676682
if isinstance(self.credentials, IdPass):
677-
self._login(self.credentials, mfa_code)
683+
self._login_id_pass(self.credentials, mfa_code)
678684
elif isinstance(self.credentials, Pat):
679-
self.tokens = self.credentials
685+
self._login_pat(self.credentials)
680686
else:
681687
assert_noreturn(self.credentials)
682688

683-
def _login(self, id_pass: IdPass, mfa_code: Optional[str] = None) -> None:
689+
def _login_id_pass(self, id_pass: IdPass, mfa_code: Optional[str] = None) -> None:
684690
login_info = {"user_id": id_pass.user_id, "password": id_pass.password}
685691

686692
url = f"{self.url_prefix}/login"
@@ -704,6 +710,9 @@ def _login(self, id_pass: IdPass, mfa_code: Optional[str] = None) -> None:
704710
self.tokens = Tokens.from_dict(token_dict)
705711
logger.debug("Logged in successfully. user_id = %s", id_pass.user_id)
706712

713+
def _login_pat(self, pat: Pat) -> None:
714+
self.tokens = pat
715+
707716
def logout(self) -> None:
708717
"""
709718
ログアウトします。

0 commit comments

Comments
 (0)