Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .vscode/cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
],
"words": [
"additionals",
"Annofab",
"astimezone",
"asyncio",
"dateutil",
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# annofab-api-python-client
[AnnoFab Web API](https://annofab.com/docs/api/) のPythonクライアントライブラリです。
[Annofab Web API](https://annofab.com/docs/api/) のPythonクライアントライブラリです。

[![Build Status](https://app.travis-ci.com/kurusugawa-computer/annofab-api-python-client.svg?branch=main)](https://app.travis-ci.com/kurusugawa-computer/annofab-api-python-client)
[![CodeQL](https://github.com/kurusugawa-computer/annofab-api-python-client/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/kurusugawa-computer/annofab-api-python-client/actions/workflows/codeql-analysis.yml)
Expand All @@ -10,10 +10,10 @@



* **AnnoFab Web API Documentation:** https://annofab.com/docs/api/
* **Annofab Web API Documentation:** https://annofab.com/docs/api/
* **Reference Documentation:** https://annofab-api-python-client.readthedocs.io/en/latest/
* **annofab-cli** https://github.com/kurusugawa-computer/annofab-cli
* 「タスクの一括差し戻し」や、「プロジェクト間の差分表示」など、AnnoFabの画面で実施するには時間がかかる操作を、CLIツールとして提供しています。
* 「タスクの一括差し戻し」や、「プロジェクト間の差分表示」など、Annofabの画面で実施するには時間がかかる操作を、CLIツールとして提供しています。
* **開発者用ドキュメント**: [README_for_developer.md](https://github.com/kurusugawa-computer/annofab-api-python-client/blob/main/README_for_developer.md)


Expand All @@ -37,7 +37,7 @@


# Features
cURLやPostmanなどよりも簡単にAnnoFab Web APIにアクセスできます。
cURLやPostmanなどよりも簡単にAnnofab Web APIにアクセスできます。

* ログインを意識せずに、APIを利用できます。
* アクセス過多などで失敗した場合は、リトライされます。
Expand Down Expand Up @@ -123,7 +123,7 @@ service = build()
## `service.api`のサンプルコード

* `service.api`には、Web APIに対応するメソッドが定義されています。
* メソッド名は、[AnnoFab Web APIのOpenAPI specification](https://annofab.com/docs/api/swagger.yaml)に記載されている`operationId`を、スネークケースに変換したものです。
* メソッド名は、[Annofab Web APIのOpenAPI specification](https://annofab.com/docs/api/swagger.yaml)に記載されている`operationId`を、スネークケースに変換したものです。
* 各メソッドの戻り値の型は`Tupple[Content, Response]`です。
Responseは[requestsモジュールのReponseオブジェクト](https://2.python-requests.org/en/master/api/#requests.Response)です。
ContentはReponseの中身です。
Expand Down
10 changes: 5 additions & 5 deletions README_for_developer.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ $ make init
# Test

## テストの実行方法
1. AnnoFabの認証情報を、`.netrc`ファイルまたは環境変数に設定する。
1. Annofabの認証情報を、`.netrc`ファイルまたは環境変数に設定する。
2. 以下のコマンドを実行して、テスト用のプロジェクトとタスクを作成する。
* `poetry run python tests/create_test_project.py --organization ${MY_ORGANIZATION}`
3. `pytest.ini`に、テスト対象の`project_id`と`task_id`を指定する。
* `task_id`はプロジェクト`project_id`配下であること
* **【注意】テストを実行すると、AnnoFabプロジェクトの内容が変更される**
* **【注意】テストを実行すると、Annofabプロジェクトの内容が変更される**
4. `$ make test`コマンドを実行する。


Expand Down Expand Up @@ -115,17 +115,17 @@ ReadTheDocsのビルド結果は https://readthedocs.org/projects/annofab-api-py


-----------------
# AnnoFab WebAPIの更新により、リリースする
# Annofab WebAPIの更新により、リリースする
### 1.ソースコードの生成

annofabapiのいくつかのファイルは、[AnnoFab Web APIのOpenAPI Spec](https://annofab.com/docs/api/swagger.yaml)から自動生成しています。
annofabapiのいくつかのファイルは、[Annofab Web APIのOpenAPI Spec](https://annofab.com/docs/api/swagger.yaml)から自動生成しています。
以下のコマンドを実行すると、ソースコードが生成されます。詳細は[generate/README.md](generate/README.md)を参照してください。

```
# `generate/swagger/*.yaml`ファイルから、ソースコードを生成する
$ generate/generate.sh

# AnnoFab WebAPIのOpenAPI Spec を`generate/swagger/`にダウンロードしてから、ソースコードを生成する
# Annofab WebAPIのOpenAPI Spec を`generate/swagger/`にダウンロードしてから、ソースコードを生成する
$ generate/generate.sh --download

$ make format && make lint
Expand Down
18 changes: 9 additions & 9 deletions annofabapi/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
logger = logging.getLogger(__name__)

DEFAULT_ENDPOINT_URL = "https://annofab.com"
"""AnnoFab WebAPIのデフォルトのエンドポイントURL"""
"""Annofab WebAPIのデフォルトのエンドポイントURL"""

DEFAULT_WAITING_TIME_SECONDS_WITH_429_STATUS_CODE = 300
"""HTTP Status Codeが429のときの、デフォルト(Retry-Afterヘッダがないとき)の待ち時間です。"""
Expand Down Expand Up @@ -221,9 +221,9 @@ class AnnofabApi(AbstractAnnofabApi):
Web APIに対応したメソッドが存在するクラス。

Args:
login_user_id: AnnoFabにログインするときのユーザID
login_password: AnnoFabにログインするときのパスワード
endpoint_url: AnnoFab APIのエンドポイント。
login_user_id: AnnofabにログインするときのユーザID
login_password: Annofabにログインするときのパスワード
endpoint_url: Annofab APIのエンドポイント。

Attributes:
token_dict: login, refresh_tokenで取得したtoken情報
Expand Down Expand Up @@ -372,7 +372,7 @@ def _execute_http_request(
**kwargs,
) -> requests.Response:
"""
Session情報を使って、HTTP Requestを投げます。AnnoFab WebAPIで取得したAWS S3のURLなどに、アクセスすることを想定しています。
Session情報を使って、HTTP Requestを投げます。Annofab WebAPIで取得したAWS S3のURLなどに、アクセスすることを想定しています。
引数は ``requests.Session.request`` にそのまま渡します。

Args:
Expand Down Expand Up @@ -466,11 +466,11 @@ def _request_wrapper(
raise_for_status: bool = True,
) -> Tuple[Any, requests.Response]:
"""
AnnoFab WebAPIにアクセスして、レスポンスの中身とレスポンスを取得します。
Annofab WebAPIにアクセスして、レスポンスの中身とレスポンスを取得します。

Args:
http_method:
url_path: AnnoFab WebAPIのパス(例:``/my/account``)
url_path: Annofab WebAPIのパス(例:``/my/account``)
query_params: クエリパラメタ
header_params: リクエストヘッダ
request_body: リクエストボディ
Expand Down Expand Up @@ -589,7 +589,7 @@ def _get_signed_cookie(

def _request_get_with_cookie(self, project_id: str, url: str) -> requests.Response:
"""
Signed Cookie を使って、AnnoFabのURLにGET requestを投げる。
Signed Cookie を使って、AnnofabのURLにGET requestを投げる。

Args:
project_id: プロジェクトID
Expand Down Expand Up @@ -694,7 +694,7 @@ def refresh_token(self) -> Tuple[Dict[str, Any], requests.Response]:
@property
def account_id(self) -> str:
"""
AnnoFabにログインするユーザのaccount_id
Annofabにログインするユーザのaccount_id
"""
if self.__account_id is not None:
return self.__account_id
Expand Down
18 changes: 9 additions & 9 deletions annofabapi/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ class Resource:
AnnofabApi, Wrapperのインスタンスを保持するクラス

Args:
login_user_id: AnnoFabにログインするときのユーザID
login_password: AnnoFabにログインするときのパスワード
endpoint_url: AnnoFab APIのエンドポイント。
login_user_id: AnnofabにログインするときのユーザID
login_password: Annofabにログインするときのパスワード
endpoint_url: Annofab APIのエンドポイント。

"""

Expand Down Expand Up @@ -49,9 +49,9 @@ def build(
環境変数は``ANNOFAB_USER_ID`` , ``ANNOFAB_PASSWORD`` を参照する。

Args:
login_user_id: AnnoFabにログインするときのユーザID
login_password: AnnoFabにログインするときのパスワード
endpoint_url: AnnoFab APIのエンドポイント。
login_user_id: AnnofabにログインするときのユーザID
login_password: Annofabにログインするときのパスワード
endpoint_url: Annofab APIのエンドポイント。

Returns:
AnnofabApi, Wrapperのインスタンスを保持するインスタンス
Expand All @@ -71,7 +71,7 @@ def build(
except AnnofabApiException:
pass

raise AnnofabApiException("環境変数または`.netrc`ファイルにAnnoFab認証情報はありませんでした。")
raise AnnofabApiException("環境変数または`.netrc`ファイルにAnnofab認証情報はありませんでした。")

else:
raise ValueError()
Expand All @@ -82,7 +82,7 @@ def build_from_netrc(endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
``.netrc`` ファイルから、annofabapi.Resourceインスタンスを生成する。

Args:
endpoint_url: AnnoFab APIのエンドポイント。
endpoint_url: Annofab APIのエンドポイント。

Returns:
annofabapi.Resourceインスタンス
Expand Down Expand Up @@ -112,7 +112,7 @@ def build_from_env(endpoint_url: str = DEFAULT_ENDPOINT_URL) -> Resource:
環境変数 ``ANNOFAB_USER_ID`` , ``ANNOFAB_PASSWORD`` から、annofabapi.Resourceインスタンスを生成する。

Args:
endpoint_url: AnnoFab APIのエンドポイント。
endpoint_url: Annofab APIのエンドポイント。

Returns:
annofabapi.Resourceインスタンス
Expand Down
4 changes: 2 additions & 2 deletions annofabapi/wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -700,13 +700,13 @@ def put_annotation_for_simple_annotation_json(
annotation_specs_additionals: Optional[List[Dict[str, Any]]] = None,
) -> bool:
"""
AnnoFabからダウンロードしたアノテーションzip配下のJSONと同じフォーマット(Simple Annotation)の内容から、アノテーションを登録する。
Annofabからダウンロードしたアノテーションzip配下のJSONと同じフォーマット(Simple Annotation)の内容から、アノテーションを登録する。

Args:
project_id:
task_id:
input_data_id:
simple_annotation_json: AnnoFabからダウンロードしたアノテーションzip配下のJSONのパス
simple_annotation_json: Annofabからダウンロードしたアノテーションzip配下のJSONのパス
annotation_specs_labels: アノテーション仕様のラベル情報。annotation_specs_additionalsが指定されている場合はV2版、指定されない場合はV1版。
annotation_specs_additionals: アノテーション仕様の属性情報(V2版)

Expand Down
10 changes: 5 additions & 5 deletions docs/user_guide/advanced_usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -124,28 +124,28 @@ statistics系APIは、統計情報が格納されたJSONのファイルパスを
account_statistics = service.wrapper.get_account_statistics(project_id)


AnnoFabにファイルをアップロードするメソッド
Annofabにファイルをアップロードするメソッド
---------------------------------------------
AnnoFabにファイルをアップロードしてから、入力データや補助情報などを登録するメソッドです。
Annofabにファイルをアップロードしてから、入力データや補助情報などを登録するメソッドです。

* ``put_input_data_from_file``
* ``put_supplementary_data_from_file``

.. code-block:: python

# "sample.png"をAnnoFabにアップロードして、入力データ"input1"を作成する。
# "sample.png"をAnnofabにアップロードして、入力データ"input1"を作成する。
service.wrapper.put_input_data_from_file(project_id, input_data_id="input1",
file_path="sample.png")

# 入力データ"input1"に、"sample.png"を補助情報として登録する
service.wrapper.put_supplementary_data_from_file(project_id, input_data_id="input1",
supplementary_data_id="supplementary1", file_path="sample.png", request_body={"supplementary_data_number":1})

AnnoFabのS3にアップロードのみ実施する場合は、``upload_file_to_s3`` メソッドを利用してください。
AnnofabのS3にアップロードのみ実施する場合は、``upload_file_to_s3`` メソッドを利用してください。

.. code-block:: python

# "sample.png"をAnnoFabにアップロードして、入力データ"input1"を作成する。
# "sample.png"をAnnofabにアップロードして、入力データ"input1"を作成する。
s3_path = service.wrapper.upload_file_to_s3(project_id, file_path="sample.png")
print(s3_path)
# 's3://annotationfactory.production.temporary/xxxxxx'
Expand Down
4 changes: 2 additions & 2 deletions generate/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
# `generate/swagger/*.yaml`ファイルから、ソースコードを生成する
$ generate/generate.sh

# AnnoFab WebAPIのOpenAPI Spec を`generate/swagger/`にダウンロードしてから、ソースコードを生成する
# Annofab WebAPIのOpenAPI Spec を`generate/swagger/`にダウンロードしてから、ソースコードを生成する
$ generate/generate.sh --download

```
Expand Down Expand Up @@ -74,7 +74,7 @@ $ docker run --rm -u `id -u`:`id -g` -v ${PWD}:/local openapitools/openapi-ge


# 設計方針
AnnoFab WebAPIのOpenAPI Specファイルが多少間違っていても、annofabapiは動くような設計になっています。
Annofab WebAPIのOpenAPI Specファイルが多少間違っていても、annofabapiは動くような設計になっています。

OpenAPI Specファイルの間違いを許容する部分/許容しない部分は以下の通りです。

Expand Down
2 changes: 1 addition & 1 deletion generate/swagger/swagger.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ info:
上記例 `account_id_count` は、タスクのフィールド `account_id` でタスクを分類したところ「`account_id` が `c5eee002` であるタスクが9件、`9f110e48` であるタスクが5件、`b25dfeb3` であるタスクが1件」だったという結果を表しています。

version: 0.144.0
title: AnnoFab Web API
title: Annofab Web API
x-logo:
url: "https://annofab.com/resource/images/logo_landscape.png"
href: "https://annofab.com/"
Expand Down
2 changes: 1 addition & 1 deletion generate/swagger/swagger.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ info:
また、AggregationResultの集約の件数は、合計で10000件以下に制限されており、それを超える件数がある場合は上位10000件が取得されます。もし、省略された部分を取得したい場合は、検索条件を縛って結果に上る集約の数を減らしてください。

version: 0.144.0
title: AnnoFab Web API
title: Annofab Web API
x-logo:
url: "https://annofab.com/resource/images/logo_landscape.png"
href: "https://annofab.com/"
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[tool.poetry]
name = "annofabapi"
version = "0.60.3"
description = "Python Clinet Library of AnnoFab WebAPI (https://annofab.com/docs/api/)"
description = "Python Clinet Library of Annofab WebAPI (https://annofab.com/docs/api/)"
authors = ["yuji38kwmt"]
license = "MIT"
keywords=["annofab", "api"]
Expand Down
2 changes: 1 addition & 1 deletion pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ addopts = --verbose --capture=no -rs --ignore=tests/test_sandbox.py
endpoint_url = https://annofab.com

# Caution : Annofab project may be changed!!
# Specify AnnoFab project that has owner role assigned to you.
# Specify Annofab project that has owner role assigned to you.
project_id = 1ae6ec18-2a71-4eb5-9ac1-92329b01a5ca
task_id = test_task_1
# 変更されるタスクのtask_id
Expand Down
2 changes: 1 addition & 1 deletion tests/create_test_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def create_input_data(self, project_id: str, input_data_id: str, image_path: str
return

request_body = {
"input_data_name": "AnnoFab Logo Image",
"input_data_name": "Annofab Logo Image",
"input_data_path": "https://annofab.com/images/logo.png",
}
self.service.wrapper.put_input_data_from_file(
Expand Down
2 changes: 1 addition & 1 deletion tests/test_sandbox.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
AnnoFabプロジェクトやタスクに大きく依存したテストコードです
Annofabプロジェクトやタスクに大きく依存したテストコードです
"""
import configparser
import os
Expand Down