Skip to content

Commit c16f7c9

Browse files
authored
AnnofabApiクラスにaccount_idプロパティを追加 (#193)
* update test * update test * update test * ディレクトリ名変更 * format
1 parent f95bb18 commit c16f7c9

26 files changed

+199
-120
lines changed

README_for_developer.md

+12-5
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,22 @@ $ make lint
4646

4747
## Test
4848

49-
### テストの実行
50-
1. AnnoFabの認証情報を`.netrc`に記載する。
51-
2. `pytest.ini`にテスト対象の`project_id`を指定する。**【注意】テストを実行すると、AnnoFabプロジェクトの内容が変更される**
49+
### テストの実行方法
50+
1. AnnoFabの認証情報を、`.netrc`ファイルまたは環境変数に設定する。
51+
2. `pytest.ini`に、テスト対象の`project_id``task_id`を指定する。
52+
* `task_id`はプロジェクト`project_id`配下であること
53+
* **【注意】テストを実行すると、AnnoFabプロジェクトの内容が変更される**
5254
3. `$ make test`コマンドを実行する。
5355

54-
#### 直接pytestを実行する場合
56+
#### タスクの前提条件
57+
* タスクの先頭画像にアノテーションが1個以上付与されている
58+
* タスクの先頭画像に検査コメントが1個以上付与されている
59+
60+
61+
#### テストメソッドを指定してテストする方法
5562

5663
```
57-
$ poetry run pytest tests
64+
$ poetry run pytest tests/test_api.py::TestLogin::test_login
5865
```
5966

6067
annofabapiでは、pytestのカスタムオプションを定義しています。

annofabapi/__init__.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from annofabapi.api import AnnofabApi
22
from annofabapi.api2 import AnnofabApi2
33
from annofabapi.wrapper import Wrapper
4-
from annofabapi.resource import build, build_from_netrc, build_from_env, build_from_netrc_or_env, Resource
4+
from annofabapi.resource import build, build_from_netrc, build_from_env, Resource
55

66
from .__version__ import __version__
77

@@ -11,7 +11,6 @@
1111
"Wrapper",
1212
"build",
1313
"build_from_netrc",
14-
"build_from_netrc_or_env",
1514
"build_from_env",
1615
"Resource",
1716
"__version__",

annofabapi/api.py

+18
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ def __init__(self, login_user_id: str, login_password: str, endpoint_url: str =
9797
#: Signed Cookie情報
9898
cookies: Optional[RequestsCookieJar] = None
9999

100+
__account_id: Optional[str] = None
101+
100102
class __MyToken(AuthBase):
101103
"""
102104
requestsモジュールのauthに渡す情報。
@@ -413,3 +415,19 @@ def delete_labor_control(self, data_id: str) -> Tuple[Any, requests.Response]:
413415
http_method = "DELETE"
414416
keyword_params: Dict[str, Any] = {}
415417
return self._request_wrapper(http_method, url_path, **keyword_params)
418+
419+
#########################################
420+
# Public Method : Other
421+
#########################################
422+
@property
423+
def account_id(self) -> str:
424+
"""
425+
AnnoFabにログインするユーザのaccount_id
426+
"""
427+
if self.__account_id is not None:
428+
return self.__account_id
429+
else:
430+
content, _ = self.get_my_account()
431+
account_id = content["account_id"]
432+
self.__account_id = account_id
433+
return account_id

annofabapi/resource.py

+27-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import logging
22
import netrc
33
import os
4+
from typing import Optional
45
from urllib.parse import urlparse
56

67
from annofabapi import AnnofabApi, AnnofabApi2, Wrapper
@@ -32,10 +33,17 @@ def __init__(self, login_user_id: str, login_password: str, endpoint_url: str =
3233
self.api2 = AnnofabApi2(self.api)
3334

3435

35-
def build(login_user_id: str, login_password: str, endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
36+
def build(
37+
login_user_id: Optional[str] = None, login_password: Optional[str] = None, endpoint_url: str = DEFAULT_ENDPOINT_URL
38+
) -> Resource:
3639
"""
3740
AnnofabApi, Wrapperのインスタンスを保持するインスタンスを生成する。
3841
42+
``login_user_id``と``login_password`の両方がNoneの場合は、`.netrc`ファイルまたは環境変数から認証情報を取得する。
43+
認証情報は、`.netrc`ファイル、環境変数の順に読み込む。
44+
45+
環境変数は``ANNOFAB_USER_ID`` , ``ANNOFAB_PASSWORD`` を参照する。
46+
3947
Args:
4048
login_user_id: AnnoFabにログインするときのユーザID
4149
login_password: AnnoFabにログインするときのパスワード
@@ -45,7 +53,24 @@ def build(login_user_id: str, login_password: str, endpoint_url: str = DEFAULT_E
4553
AnnofabApi, Wrapperのインスタンスを保持するインスタンス
4654
4755
"""
48-
return Resource(login_user_id, login_password, endpoint_url=endpoint_url)
56+
if login_user_id is not None and login_password is not None:
57+
return Resource(login_user_id, login_password, endpoint_url=endpoint_url)
58+
59+
elif login_user_id is None and login_password is None:
60+
try:
61+
return build_from_netrc(endpoint_url)
62+
except AnnofabApiException:
63+
pass
64+
65+
try:
66+
return build_from_env(endpoint_url)
67+
except AnnofabApiException:
68+
pass
69+
70+
raise AnnofabApiException("`.netrc`ファイルまたは環境変数にAnnoFab認証情報はありませんでした。")
71+
72+
else:
73+
raise ValueError()
4974

5075

5176
def build_from_netrc(endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
@@ -97,29 +122,3 @@ def build_from_env(endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
97122

98123
logger.debug("環境変数からAnnoFab認証情報を読み込みました。")
99124
return Resource(login_user_id, login_password, endpoint_url=endpoint_url)
100-
101-
102-
def build_from_netrc_or_env(endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
103-
"""
104-
`.netrc`ファイルまたは環境変数からAnnoFab認証情報を取得し、annnofabapi.Resourceインスタンスを生成します。
105-
netrc, 環境変数の順に認証情報を読み込みます。
106-
107-
Args:
108-
endpoint_url:
109-
110-
Returns:
111-
112-
"""
113-
# '.netrc'ファイルから認証情報を取得する
114-
try:
115-
return build_from_netrc(endpoint_url)
116-
except AnnofabApiException:
117-
pass
118-
119-
# 環境変数から認証情報を取得する
120-
try:
121-
return build_from_env(endpoint_url)
122-
except AnnofabApiException:
123-
pass
124-
125-
raise AnnofabApiException("`.netrc`ファイルまたは環境変数にAnnoFab認証情報はありませんでした。")

pytest.ini

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
addopts = --verbose --capture=no -rs
66

77
[annofab]
8+
;endpoint_url = "https://annofab.com"
9+
810
# Caution : Annofab project may be changed!!
911
# Specify AnnoFab project that has owner role assigned to you.
1012
project_id = 58a2a621-7d4b-41e7-927b-cdc570c1114a
1113

1214
task_id = sample_423
13-
14-
input_data_id = c2a3223b-90db-4416-8c7c-55bf140af1cd

tests/data/simple-annotation-v2.zip

-7.66 KB
Binary file not shown.

tests/data/simple-annotation.zip

3.92 KB
Binary file not shown.

tests/data/simple-annotation/sample_0/.__tests__data__lenna.png.json

-1
This file was deleted.

tests/data/simple-annotation/sample_1/.__tests__data__lenna.png.json

-1
This file was deleted.

0 commit comments

Comments
 (0)