Skip to content

Commit ca66d54

Browse files
authored
Merge pull request #82 from kurusugawa-computer/feature/annofab-v0.66.0
Annofab v0.66.0に対応
2 parents 319c6d6 + 0e3d64b commit ca66d54

17 files changed

+596
-73
lines changed

.travis.yml

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ python:
66
- "3.8"
77
install:
88
- pip install . flake8 mypy pylint pytest
9+
- echo -e "machine annofab.com\nlogin FOO\npassword BAR\n" > ~/.netrc && chmod 600 ~/.netrc
910
script:
1011
- flake8 annofabapi
1112
- mypy annofabapi --config-file setup.cfg

annofabapi/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '0.20.1'
1+
__version__ = '0.21.0'

annofabapi/dataclass/project_member.py

-3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,3 @@ class ProjectMember:
4949

5050
sampling_inspection_rate: Optional[int]
5151
"""メンバー固有の抜取検査率。0-100のパーセント値で指定する。値が指定された場合、プロジェクトの抜取検査率を指定の値で上書きする。"""
52-
53-
sampling_acceptance_rate: Optional[int]
54-
"""メンバー固有の抜取受入率。"""

annofabapi/dataclass/statistics.py

+32-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from dataclasses_json import dataclass_json
1616

17-
from annofabapi.models import TaskPhase, TaskStatus
17+
from annofabapi.models import GraphType, TaskPhase, TaskStatus
1818

1919

2020
@dataclass_json
@@ -213,3 +213,34 @@ class WorktimeStatistics:
213213

214214
accounts: Optional[List[AccountWorktimeStatistics]]
215215
""""""
216+
@dataclass_json
217+
@dataclass
218+
class Marker:
219+
"""
220+
221+
"""
222+
marker_id: Optional[str]
223+
"""マーカーID。[値の制約についてはこちら。](#section/API-Convention/APIID) """
224+
225+
title: Optional[str]
226+
""""""
227+
228+
graph_type: Optional[GraphType]
229+
""""""
230+
231+
marked_at: Optional[str]
232+
"""グラフ上のマーカー位置(x軸)"""
233+
@dataclass_json
234+
@dataclass
235+
class Markers:
236+
"""
237+
238+
"""
239+
project_id: Optional[str]
240+
"""プロジェクトID。[値の制約についてはこちら。](#section/API-Convention/APIID) """
241+
242+
markers: Optional[List[Marker]]
243+
""""""
244+
245+
updated_datetime: Optional[str]
246+
""""""

annofabapi/dataclass/task.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -106,4 +106,4 @@ class Task:
106106
""""""
107107

108108
sampling: Optional[str]
109-
"""* 'inspection_skipped' - このタスクが抜取検査の対象外となり、検査フェーズをスキップしたことを表す。 * 'inspection_stages_skipped' - このタスクが抜取検査の対象外となり、検査フェーズのステージを一部スキップしたことを表す。 * `acceptance_skipped` - このタスクが抜取検査の対象外となり、受入フェーズをスキップしたことを表す。 * `inspection_and_acceptance_skipped` - このタスクが抜取検査の対象外となり、検査・受入フェーズをスキップしたことを表す 未指定時はこのタスクが抜取検査の対象となったことを表す。(通常のワークフローを通過する) """
109+
"""* `inspection_skipped` - このタスクが抜取検査の対象外となり、検査フェーズをスキップしたことを表す。 * `inspection_stages_skipped` - このタスクが抜取検査の対象外となり、検査フェーズのステージを一部スキップしたことを表す。 * `acceptance_skipped` - このタスクが抜取検査の対象外となり、受入フェーズをスキップしたことを表す。 * `inspection_and_acceptance_skipped` - このタスクが抜取検査の対象外となり、検査・受入フェーズをスキップしたことを表す 未指定時はこのタスクが抜取検査の対象となったことを表す。(通常のワークフローを通過する) """

annofabapi/generated_api.py

+55-8
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def confirm_reset_password(self, request_body: Optional[Any] = None, **kwargs) -
8787
authorizations: EveryoneRequestBody
8888
8989
90-
新しいパスワードに変更します。 本人確認のため、[パスワードリセットを要求](#operation/resetPassoword)で受信したメールに記載された検証コードを使用します。 パスワードリセットプロセスの最終ステップです。
90+
新しいパスワードに変更します。 本人確認のため、[パスワードリセットを要求](#operation/resetPassword)で受信したメールに記載された検証コードを使用します。 パスワードリセットプロセスの最終ステップです。
9191
9292
Args:
9393
request_body (Any): Request Body
@@ -136,7 +136,7 @@ def confirm_verify_email(self, request_body: Optional[Any] = None, **kwargs) ->
136136
authorizations: Everyone
137137
138138
139-
[受け取った確認コード](#operation/verifyEmail)を使い、メールアドレスが有効であることを確認します。
139+
[受け取った確認コード](#operation/initiateVerifyEmail)を使い、メールアドレスが有効であることを確認します。
140140
141141
Args:
142142
request_body (Any): Request Body
@@ -161,7 +161,7 @@ def initiate_password_reset(self, request_body: Optional[Any] = None, **kwargs)
161161
authorizations: EveryoneRequestBody
162162
163163
164-
パスワードリセットプロセスを開始します。 このAPIを実行した後、後続の[古いパスワードを無効化](#operation/resetPassoword)を実行するまでは、古いパスワードでログインできます。
164+
パスワードリセットプロセスを開始します。 このAPIを実行した後、後続の[古いパスワードを無効化](#operation/resetPassword)を実行するまでは、古いパスワードでログインできます。
165165
166166
Args:
167167
request_body (Any): Request Body
@@ -259,7 +259,7 @@ def reset_password(self, request_body: Optional[Any] = None, **kwargs) -> Tuple[
259259
authorizations: EveryoneRequestBody
260260
261261
262-
古いパスワードを無効化し、パスワードリセットに必要な確認コードをメールで送付します。 本人確認のため、[パスワードリセットを要求](#operation/initiatePasswordReset)して取得したトークンを使用します。 後続の[新しいパスワードに変更](#operation/confirmResetPassoword)を実行することで、新しいパスワードに変更できます。
262+
古いパスワードを無効化し、パスワードリセットに必要な確認コードをメールで送付します。 本人確認のため、[パスワードリセットを要求](#operation/initiatePasswordReset)して取得したトークンを使用します。 後続の[新しいパスワードに変更](#operation/confirmResetPassword)を実行することで、新しいパスワードに変更できます。
263263
264264
Args:
265265
request_body (Any): Request Body
@@ -342,15 +342,15 @@ def get_annotation_archive(self, project_id: str, query_params: Optional[Dict[st
342342
authorizations: ProjectDataUser
343343
344344
345-
プロジェクト内のアノテーション(simple版)をZIPにまとめて、一括で取得します。 simple版のアノテーションJSONは、機械学習の一般的な利用で扱いやすい構造になっています。 取得できるZIPファイルの構造は以下のとおりです。 * ファイル名: af-annotation-{プロジェクトID}-{更新日時: yyyyMMdd-hhmmss}.zip * 内容: / * {タスクID}/ * {入力データ名}.json * アノテーションJSONデータ (詳細は 200レスポンス を参照) * {入力データ名}/ (塗りつぶしアノテーション時のみ) * {アノテーションデータID} (塗りつぶしのPNG画像) IDが異なる入力データで {入力データ名}が一致するときは、重複ファイル名には {入力データ名__入力データID} のように接尾辞がつきます。 AnnoFabの画像アップロード機能を使うとこのようなケースは発生しませんが、[入力データ更新API](#operation/putInputData)で入力名を重複させると発生します。 入力名の重複を解消してアノテーションZIPを再作成すれば、接尾辞を解消できます。 特定のタスクのsimpleアノテーションを取得したい場合は、[getAnnotation](#operation/getAnnotation) を使用できます。
345+
プロジェクト内のアノテーション(simple版)をZIPにまとめて、一括で取得します。 simple版のアノテーションJSONは、機械学習の一般的な利用で扱いやすい構造になっています。 取得できるZIPファイルの構造は以下のとおりです。 * ファイル名: af-annotation-{プロジェクトID}-{更新日時: yyyyMMdd-hhmmss}.zip * 内容: / * {タスクID}/ * {入力データ名}.json * アノテーションJSONデータ (詳細は [SimpleAnnotation](#section/SimpleAnnotation) を参照) * {入力データ名}/ (塗りつぶしアノテーション時のみ) * {アノテーションデータID} (塗りつぶしのPNG画像) IDが異なる入力データで {入力データ名}が一致するときは、重複ファイル名には {入力データ名__入力データID} のように接尾辞がつきます。 AnnoFabの画像アップロード機能を使うとこのようなケースは発生しませんが、[入力データ更新API](#operation/putInputData)で入力名を重複させると発生します。 入力名の重複を解消してアノテーションZIPを再作成すれば、接尾辞を解消できます。 特定のタスクのsimpleアノテーションを取得したい場合は、[getAnnotation](#operation/getAnnotation) を使用できます。
346346
347347
Args:
348348
project_id (str): プロジェクトID (required)
349349
query_params (Dict[str, Any]): Query Parameters
350350
v2 (str): このクエリパラメータのキーだけを指定(`?v2`)、または値 `true` も指定(`?v2=true`)すると、アノテーションJSONのファイル名は `{入力データID}.json` になります。 この v2 形式は、入力データ名がファイル名の長さ上限を上回ってもよいように再設計されたものです。 以前の v1 形式(アノテーションJSONのファイル名は `{入力データ名}.json` )はいずれ廃止され、クエリパラメータ `v2` があってもなくても v2 形式に置き換わる予定です。
351351
352352
Returns:
353-
Tuple[SimpleAnnotation, requests.Response]
353+
Tuple[InlineResponse2004, requests.Response]
354354
355355
356356
"""
@@ -399,13 +399,13 @@ def get_archive_full_with_pro_id(self, project_id: str, **kwargs) -> Tuple[Any,
399399
authorizations: ProjectDataUser
400400
401401
402-
プロジェクト内のアノテーション(full版)がまとめられたZIPを取得します。 full版のアノテーションJSONデータは、画像やアノテーションやアノテーション作成者など管理用の詳細情報が付随しています。機械学習での一般的な利用には、[詳細情報を省いた扱いやすい構造の simple版](#operation/getAnnotationArchive) を推奨します。 取得できるZIPファイルの構造は以下のとおりです。 * ファイル名: af-annotation-{プロジェクトID}-{更新日時: yyyyMMdd-hhmmss}.zip * 内容: / * {タスクID}/ * {入力データID}.json * アノテーションJSONデータ (詳細は 200レスポンス を参照) * {入力データID}/ (塗りつぶしアノテーション時のみ) * {アノテーションデータID} (塗りつぶしのPNG画像)
402+
プロジェクト内のアノテーション(full版)がまとめられたZIPを取得します。 full版のアノテーションJSONデータは、画像やアノテーションやアノテーション作成者など管理用の詳細情報が付随しています。機械学習での一般的な利用には、[詳細情報を省いた扱いやすい構造の simple版](#operation/getAnnotationArchive) を推奨します。 取得できるZIPファイルの構造は以下のとおりです。 * ファイル名: af-annotation-{プロジェクトID}-{更新日時: yyyyMMdd-hhmmss}.zip * 内容: / * {タスクID}/ * {入力データID}.json * アノテーションJSONデータ (詳細は [FullAnnotation](#section/FullAnnotation) を参照) * {入力データID}/ (塗りつぶしアノテーション時のみ) * {アノテーションデータID} (塗りつぶしのPNG画像)
403403
404404
Args:
405405
project_id (str): プロジェクトID (required)
406406
407407
Returns:
408-
Tuple[FullAnnotation, requests.Response]
408+
Tuple[InlineResponse2004, requests.Response]
409409
410410
411411
"""
@@ -1895,6 +1895,27 @@ def get_label_statistics(self, project_id: str, **kwargs) -> Tuple[Any, requests
18951895
keyword_params: Dict[str, Any] = {}
18961896
return self._request_wrapper(http_method, url_path, **keyword_params)
18971897

1898+
def get_markers(self, project_id: str, **kwargs) -> Tuple[Any, requests.Response]:
1899+
"""統計グラフマーカー取得
1900+
1901+
1902+
authorizations: AllProjectMember
1903+
1904+
1905+
1906+
Args:
1907+
project_id (str): プロジェクトID (required)
1908+
1909+
Returns:
1910+
Tuple[Markers, requests.Response]
1911+
1912+
1913+
"""
1914+
url_path = f'/projects/{project_id}/statistics/markers'
1915+
http_method = 'GET'
1916+
keyword_params: Dict[str, Any] = {}
1917+
return self._request_wrapper(http_method, url_path, **keyword_params)
1918+
18981919
def get_task_phase_statistics(self, project_id: str, **kwargs) -> Tuple[Any, requests.Response]:
18991920
"""フェーズ別タスク集計取得
19001921
@@ -1959,6 +1980,32 @@ def get_worktime_statistics(self, project_id: str, **kwargs) -> Tuple[Any, reque
19591980
keyword_params: Dict[str, Any] = {}
19601981
return self._request_wrapper(http_method, url_path, **keyword_params)
19611982

1983+
def put_markers(self, project_id: str, request_body: Optional[Any] = None,
1984+
**kwargs) -> Tuple[Any, requests.Response]:
1985+
"""統計グラフマーカー更新
1986+
1987+
1988+
authorizations: ProjectOwner
1989+
1990+
1991+
1992+
Args:
1993+
project_id (str): プロジェクトID (required)
1994+
request_body (Any): Request Body
1995+
put_markers_request (PutMarkersRequest): (required)
1996+
1997+
Returns:
1998+
Tuple[Markers, requests.Response]
1999+
2000+
2001+
"""
2002+
url_path = f'/projects/{project_id}/statistics/markers'
2003+
http_method = 'PUT'
2004+
keyword_params: Dict[str, Any] = {
2005+
'request_body': request_body,
2006+
}
2007+
return self._request_wrapper(http_method, url_path, **keyword_params)
2008+
19622009
#########################################
19632010
# Public Method : AfSupplementaryApi
19642011
# NOTE: This method is auto generated by OpenAPI Generator

annofabapi/models.py

+71-1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@
127127
128128
"""
129129

130+
MakerId = NewType('MakerId', str)
131+
"""
132+
133+
Example:
134+
``12345678-abcd-1234-abcd-1234abcd5678``
135+
136+
"""
137+
130138
JobId = NewType('JobId', str)
131139
"""
132140
@@ -1415,6 +1423,23 @@ class AssigneeRuleOfResubmittedTask(Enum):
14151423
14161424
"""
14171425

1426+
1427+
class GraphType(Enum):
1428+
"""
1429+
* `task_progress` - タスク進捗状況 * `cumulative_labor_time_by_task_phase` - タスクフェーズ別累積作業時間 * `number_of_inspections_per_inspection_phrase` - 検査コメント内容別指摘回数 * `number_of_task_rejections_by_member` - メンバー別タスクが差戻された回数 * `labor_time_per_member` - メンバー別作業時間 * `mean_labor_time_per_image` - 画像一枚当たりの作業時間平均 * `mean_labor_time_per_minute_of_movie` - 動画一分当たりの作業時間平均 * `mean_labor_time_per_image_by_member` - メンバー別画像一枚当たりの作業時間平均 * `mean_labor_time_per_minute_of_movie_by_member` - メンバー別動画一分当たりの作業時間平均
1430+
"""
1431+
1432+
TASK_PROGRESS = "task_progress"
1433+
CUMULATIVE_LABOR_TIME_BY_TASK_PHASE = "cumulative_labor_time_By_task_phase"
1434+
NUMBER_OF_INSPECTIONS_PER_INSPECTION_PHRASE = "number_of_inspections_per_inspection_phrase"
1435+
NUMBER_OF_TASK_REJECTIONS_BY_MEMBER = "number_of_task_rejections_by_member"
1436+
LABOR_TIME_PER_MEMBER = "labor_time_per_member"
1437+
MEAN_LABOR_TIME_PER_IMAGE = "mean_labor_time_per_image"
1438+
MEAN_LABOR_TIME_PER_MINUTE_OF_MOVIE = "mean_labor_time_per_minute_of_movie"
1439+
MEAN_LABOR_TIME_PER_IMAGE_BY_MEMBER = "mean_labor_time_per_image_by_member"
1440+
MEAN_LABOR_TIME_PER_MINUTE_OF_MOVIE_BY_MEMBER = "mean_labor_time_per_minute_of_movie_by_member"
1441+
1442+
14181443
HistogramItem = Dict[str, Any]
14191444
"""
14201445
@@ -2176,6 +2201,38 @@ class JobType(Enum):
21762201
* token: Token
21772202
21782203
2204+
"""
2205+
2206+
Marker = Dict[str, Any]
2207+
"""
2208+
2209+
2210+
Kyes of Dict
2211+
2212+
* marker_id: str
2213+
マーカーID。[値の制約についてはこちら。](#section/API-Convention/APIID)
2214+
* title: str
2215+
2216+
* graph_type: GraphType
2217+
2218+
* marked_at: str
2219+
グラフ上のマーカー位置(x軸)
2220+
2221+
"""
2222+
2223+
Markers = Dict[str, Any]
2224+
"""
2225+
2226+
2227+
Kyes of Dict
2228+
2229+
* project_id: str
2230+
プロジェクトID。[値の制約についてはこちら。](#section/API-Convention/APIID)
2231+
* markers: List[Marker]
2232+
2233+
* updated_datetime: str
2234+
2235+
21792236
"""
21802237

21812238
Message = Dict[str, Any]
@@ -2650,6 +2707,19 @@ class ProjectStatus(Enum):
26502707
* tasks: List[ProjectTaskStatistics]
26512708
26522709
2710+
"""
2711+
2712+
PutMarkersRequest = Dict[str, Any]
2713+
"""
2714+
2715+
2716+
Kyes of Dict
2717+
2718+
* markers: List[Marker]
2719+
2720+
* last_updated_datetime: str
2721+
新規作成時は未指定、更新時は必須(更新前の日時)
2722+
26532723
"""
26542724

26552725
PutMyAccountRequest = Dict[str, Any]
@@ -2965,7 +3035,7 @@ class SupplementaryDataType(Enum):
29653035
* updated_datetime: str
29663036
29673037
* sampling: str
2968-
* 'inspection_skipped' - このタスクが抜取検査の対象外となり、検査フェーズをスキップしたことを表す。 * 'inspection_stages_skipped' - このタスクが抜取検査の対象外となり、検査フェーズのステージを一部スキップしたことを表す。 * `acceptance_skipped` - このタスクが抜取検査の対象外となり、受入フェーズをスキップしたことを表す。 * `inspection_and_acceptance_skipped` - このタスクが抜取検査の対象外となり、検査・受入フェーズをスキップしたことを表す 未指定時はこのタスクが抜取検査の対象となったことを表す。(通常のワークフローを通過する)
3038+
* `inspection_skipped` - このタスクが抜取検査の対象外となり、検査フェーズをスキップしたことを表す。 * `inspection_stages_skipped` - このタスクが抜取検査の対象外となり、検査フェーズのステージを一部スキップしたことを表す。 * `acceptance_skipped` - このタスクが抜取検査の対象外となり、受入フェーズをスキップしたことを表す。 * `inspection_and_acceptance_skipped` - このタスクが抜取検査の対象外となり、検査・受入フェーズをスキップしたことを表す 未指定時はこのタスクが抜取検査の対象となったことを表す。(通常のワークフローを通過する)
29693039
29703040
"""
29713041

generate/generate.sh

+1
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ declare -a model_files=(${MODELS_DIR}/project_task_statistics.py ${MODELS_DIR}/p
197197
${MODELS_DIR}/phase_statistics.py ${MODELS_DIR}/task_phase_statistics.py \
198198
${MODELS_DIR}/label_statistics.py \
199199
${MODELS_DIR}/histogram_item.py ${MODELS_DIR}/worktime_statistics_item.py ${MODELS_DIR}/account_worktime_statistics.py ${MODELS_DIR}/worktime_statistics.py \
200+
${MODELS_DIR}/graph_type.py ${MODELS_DIR}/marker.py ${MODELS_DIR}/markers.py
200201
)
201202
cat partial-header/dataclass/common.py partial-header/dataclass/statistics.py \
202203
${model_files[@]} > ../annofabapi/dataclass/statistics.py

generate/partial-header/models_partial_header_v1.py

+8
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,14 @@
129129
130130
"""
131131

132+
MakerId = NewType('MakerId', str)
133+
"""
134+
135+
Example:
136+
``12345678-abcd-1234-abcd-1234abcd5678``
137+
138+
"""
139+
132140
JobId = NewType('JobId', str)
133141
"""
134142

0 commit comments

Comments
 (0)