Skip to content

Commit e3ca315

Browse files
authored
[resource.py] .netrcまたは環境変数から認証情報を読み込むメソッドを追加 (#191)
* [resource.py] netrcまたは環境変数から情報を取得するメソッドを追加 * version up * メソッド名の変更
1 parent 9b135ea commit e3ca315

File tree

7 files changed

+57
-5
lines changed

7 files changed

+57
-5
lines changed

README.md

+20-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ https://pypi.org/project/annofabapi/
5656

5757
## インスタンス生成
5858

59-
### user_id, passwordをコンストラクタ引数に渡す
59+
### user_id, passwordをコンストラクタ引数に渡す場合
6060

6161
```python
6262
# APIアクセス用のインスタンスを生成
@@ -69,7 +69,7 @@ password = "YYYYYY"
6969
service = build(user_id, password)
7070
```
7171

72-
### `.netrc`に記載されたuser_id, passwordから生成
72+
### `.netrc`に認証情報を記載する場合
7373
`.netrc`ファイルに、AnnofabのユーザIDとパスワードを記載します。
7474

7575
```plain:.netrc
@@ -94,6 +94,24 @@ service = build_from_netrc()
9494
* パスは`%USERPROFILE%\.netrc`
9595

9696

97+
### 環境変数に認証情報を設定する場合
98+
環境変数`ANNOFAB_USER_ID``ANNOFAB_PASSWORD`にユーザIDとパスワードを設定します。
99+
100+
```python
101+
from annofabapi import build_from_env
102+
service = build_from_env()
103+
```
104+
105+
106+
### `.netrc`または環境変数に認証情報を設定する場合
107+
`.netrc`、環境変数の順に認証情報を読み込みます。
108+
109+
```python
110+
from annofabapi import build_from_netrc_or_env
111+
service = build_from_netrc_or_env()
112+
```
113+
114+
97115
## `service.api`のサンプルコード
98116

99117
* `service.api`には、Web APIに対応するメソッドが定義されています。

annofabapi/__init__.py

+2-1
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, Resource
4+
from annofabapi.resource import build, build_from_netrc, build_from_env, build_from_netrc_or_env, Resource
55

66
from .__version__ import __version__
77

@@ -11,6 +11,7 @@
1111
"Wrapper",
1212
"build",
1313
"build_from_netrc",
14+
"build_from_netrc_or_env",
1415
"build_from_env",
1516
"Resource",
1617
"__version__",

annofabapi/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.38.1"
1+
__version__ = "0.38.2"

annofabapi/resource.py

+26
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,29 @@ def build_from_env(endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
9797

9898
logger.debug("環境変数からAnnoFab認証情報を読み込みました。")
9999
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認証情報はありませんでした。")

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "annofabapi"
3-
version = "0.38.1"
3+
version = "0.38.2"
44
description = "Python Clinet Library of AnnoFab WebAPI (https://annofab.com/docs/api/)"
55
authors = ["yuji38kwmt <[email protected]>"]
66
maintainers = ["yuji38kwmt <[email protected]>"]

tests/test_api.py

+1
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,7 @@ def test_put_webhook_and_delete_webhook(self):
440440

441441
assert type(api.delete_webhook(project_id, test_webhook_id)[0]) == dict
442442

443+
443444
class TestLabor:
444445
def test_get_labor_control_worktime(self):
445446
wrapper.get_labor_control_worktime(project_id=project_id)

tests/test_local_resource.py

+6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import annofabapi
99
import annofabapi.exceptions
10+
from annofabapi.resource import build_from_netrc_or_env
1011

1112
# プロジェクトトップに移動する
1213
os.chdir(os.path.dirname(os.path.abspath(__file__)) + "/../")
@@ -32,6 +33,11 @@ def test_build_from_env(self):
3233
os.environ["ANNOFAB_PASSWORD"] = "BAR"
3334
assert isinstance(annofabapi.build_from_env(), annofabapi.Resource)
3435

36+
def test_build_from_netrc_or_env(self):
37+
os.environ["ANNOFAB_USER_ID"] = "FOO"
38+
os.environ["ANNOFAB_PASSWORD"] = "BAR"
39+
assert isinstance(build_from_netrc_or_env(), annofabapi.Resource)
40+
3541
def test_build_with_endpoint(self):
3642
resource = annofabapi.build("test_user", "password", "https://localhost:8080")
3743
assert resource.api.url_prefix == "https://localhost:8080/api/v1"

0 commit comments

Comments
 (0)