Skip to content

Annofab v0.66.0に対応 #82

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Oct 29, 2019
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ python:
- "3.8"
install:
- pip install . flake8 mypy pylint pytest
- echo -e "machine annofab.com\nlogin FOO\npassword BAR\n" > ~/.netrc && chmod 600 ~/.netrc
script:
- flake8 annofabapi
- mypy annofabapi --config-file setup.cfg
Expand Down
2 changes: 1 addition & 1 deletion annofabapi/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.20.1'
__version__ = '0.21.0'
3 changes: 0 additions & 3 deletions annofabapi/dataclass/project_member.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,3 @@ class ProjectMember:

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

sampling_acceptance_rate: Optional[int]
"""メンバー固有の抜取受入率。"""
33 changes: 32 additions & 1 deletion annofabapi/dataclass/statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

from dataclasses_json import dataclass_json

from annofabapi.models import TaskPhase, TaskStatus
from annofabapi.models import GraphType, TaskPhase, TaskStatus


@dataclass_json
Expand Down Expand Up @@ -213,3 +213,34 @@ class WorktimeStatistics:

accounts: Optional[List[AccountWorktimeStatistics]]
""""""
@dataclass_json
@dataclass
class Marker:
"""

"""
marker_id: Optional[str]
"""マーカーID。[値の制約についてはこちら。](#section/API-Convention/APIID) """

title: Optional[str]
""""""

graph_type: Optional[GraphType]
""""""

marked_at: Optional[str]
"""グラフ上のマーカー位置(x軸)"""
@dataclass_json
@dataclass
class Markers:
"""

"""
project_id: Optional[str]
"""プロジェクトID。[値の制約についてはこちら。](#section/API-Convention/APIID) """

markers: Optional[List[Marker]]
""""""

updated_datetime: Optional[str]
""""""
2 changes: 1 addition & 1 deletion annofabapi/dataclass/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,4 @@ class Task:
""""""

sampling: Optional[str]
"""* 'inspection_skipped' - このタスクが抜取検査の対象外となり、検査フェーズをスキップしたことを表す。 * 'inspection_stages_skipped' - このタスクが抜取検査の対象外となり、検査フェーズのステージを一部スキップしたことを表す。 * `acceptance_skipped` - このタスクが抜取検査の対象外となり、受入フェーズをスキップしたことを表す。 * `inspection_and_acceptance_skipped` - このタスクが抜取検査の対象外となり、検査・受入フェーズをスキップしたことを表す 未指定時はこのタスクが抜取検査の対象となったことを表す。(通常のワークフローを通過する) """
"""* `inspection_skipped` - このタスクが抜取検査の対象外となり、検査フェーズをスキップしたことを表す。 * `inspection_stages_skipped` - このタスクが抜取検査の対象外となり、検査フェーズのステージを一部スキップしたことを表す。 * `acceptance_skipped` - このタスクが抜取検査の対象外となり、受入フェーズをスキップしたことを表す。 * `inspection_and_acceptance_skipped` - このタスクが抜取検査の対象外となり、検査・受入フェーズをスキップしたことを表す 未指定時はこのタスクが抜取検査の対象となったことを表す。(通常のワークフローを通過する) """
63 changes: 55 additions & 8 deletions annofabapi/generated_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def confirm_reset_password(self, request_body: Optional[Any] = None, **kwargs) -
authorizations: EveryoneRequestBody


新しいパスワードに変更します。 本人確認のため、[パスワードリセットを要求](#operation/resetPassoword)で受信したメールに記載された検証コードを使用します。 パスワードリセットプロセスの最終ステップです。
新しいパスワードに変更します。 本人確認のため、[パスワードリセットを要求](#operation/resetPassword)で受信したメールに記載された検証コードを使用します。 パスワードリセットプロセスの最終ステップです。

Args:
request_body (Any): Request Body
Expand Down Expand Up @@ -136,7 +136,7 @@ def confirm_verify_email(self, request_body: Optional[Any] = None, **kwargs) ->
authorizations: Everyone


[受け取った確認コード](#operation/verifyEmail)を使い、メールアドレスが有効であることを確認します。
[受け取った確認コード](#operation/initiateVerifyEmail)を使い、メールアドレスが有効であることを確認します。

Args:
request_body (Any): Request Body
Expand All @@ -161,7 +161,7 @@ def initiate_password_reset(self, request_body: Optional[Any] = None, **kwargs)
authorizations: EveryoneRequestBody


パスワードリセットプロセスを開始します。 このAPIを実行した後、後続の[古いパスワードを無効化](#operation/resetPassoword)を実行するまでは、古いパスワードでログインできます。
パスワードリセットプロセスを開始します。 このAPIを実行した後、後続の[古いパスワードを無効化](#operation/resetPassword)を実行するまでは、古いパスワードでログインできます。

Args:
request_body (Any): Request Body
Expand Down Expand Up @@ -259,7 +259,7 @@ def reset_password(self, request_body: Optional[Any] = None, **kwargs) -> Tuple[
authorizations: EveryoneRequestBody


古いパスワードを無効化し、パスワードリセットに必要な確認コードをメールで送付します。 本人確認のため、[パスワードリセットを要求](#operation/initiatePasswordReset)して取得したトークンを使用します。 後続の[新しいパスワードに変更](#operation/confirmResetPassoword)を実行することで、新しいパスワードに変更できます。
古いパスワードを無効化し、パスワードリセットに必要な確認コードをメールで送付します。 本人確認のため、[パスワードリセットを要求](#operation/initiatePasswordReset)して取得したトークンを使用します。 後続の[新しいパスワードに変更](#operation/confirmResetPassword)を実行することで、新しいパスワードに変更できます。

Args:
request_body (Any): Request Body
Expand Down Expand Up @@ -342,15 +342,15 @@ def get_annotation_archive(self, project_id: str, query_params: Optional[Dict[st
authorizations: ProjectDataUser


プロジェクト内のアノテーション(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) を使用できます。
プロジェクト内のアノテーション(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) を使用できます。

Args:
project_id (str): プロジェクトID (required)
query_params (Dict[str, Any]): Query Parameters
v2 (str): このクエリパラメータのキーだけを指定(`?v2`)、または値 `true` も指定(`?v2=true`)すると、アノテーションJSONのファイル名は `{入力データID}.json` になります。 この v2 形式は、入力データ名がファイル名の長さ上限を上回ってもよいように再設計されたものです。 以前の v1 形式(アノテーションJSONのファイル名は `{入力データ名}.json` )はいずれ廃止され、クエリパラメータ `v2` があってもなくても v2 形式に置き換わる予定です。

Returns:
Tuple[SimpleAnnotation, requests.Response]
Tuple[InlineResponse2004, requests.Response]


"""
Expand Down Expand Up @@ -399,13 +399,13 @@ def get_archive_full_with_pro_id(self, project_id: str, **kwargs) -> Tuple[Any,
authorizations: ProjectDataUser


プロジェクト内のアノテーション(full版)がまとめられたZIPを取得します。 full版のアノテーションJSONデータは、画像やアノテーションやアノテーション作成者など管理用の詳細情報が付随しています。機械学習での一般的な利用には、[詳細情報を省いた扱いやすい構造の simple版](#operation/getAnnotationArchive) を推奨します。 取得できるZIPファイルの構造は以下のとおりです。 * ファイル名: af-annotation-{プロジェクトID}-{更新日時: yyyyMMdd-hhmmss}.zip * 内容: / * {タスクID}/ * {入力データID}.json * アノテーションJSONデータ (詳細は 200レスポンス を参照) * {入力データID}/ (塗りつぶしアノテーション時のみ) * {アノテーションデータID} (塗りつぶしのPNG画像)
プロジェクト内のアノテーション(full版)がまとめられたZIPを取得します。 full版のアノテーションJSONデータは、画像やアノテーションやアノテーション作成者など管理用の詳細情報が付随しています。機械学習での一般的な利用には、[詳細情報を省いた扱いやすい構造の simple版](#operation/getAnnotationArchive) を推奨します。 取得できるZIPファイルの構造は以下のとおりです。 * ファイル名: af-annotation-{プロジェクトID}-{更新日時: yyyyMMdd-hhmmss}.zip * 内容: / * {タスクID}/ * {入力データID}.json * アノテーションJSONデータ (詳細は [FullAnnotation](#section/FullAnnotation) を参照) * {入力データID}/ (塗りつぶしアノテーション時のみ) * {アノテーションデータID} (塗りつぶしのPNG画像)

Args:
project_id (str): プロジェクトID (required)

Returns:
Tuple[FullAnnotation, requests.Response]
Tuple[InlineResponse2004, requests.Response]


"""
Expand Down Expand Up @@ -1895,6 +1895,27 @@ def get_label_statistics(self, project_id: str, **kwargs) -> Tuple[Any, requests
keyword_params: Dict[str, Any] = {}
return self._request_wrapper(http_method, url_path, **keyword_params)

def get_markers(self, project_id: str, **kwargs) -> Tuple[Any, requests.Response]:
"""統計グラフマーカー取得


authorizations: AllProjectMember



Args:
project_id (str): プロジェクトID (required)

Returns:
Tuple[Markers, requests.Response]


"""
url_path = f'/projects/{project_id}/statistics/markers'
http_method = 'GET'
keyword_params: Dict[str, Any] = {}
return self._request_wrapper(http_method, url_path, **keyword_params)

def get_task_phase_statistics(self, project_id: str, **kwargs) -> Tuple[Any, requests.Response]:
"""フェーズ別タスク集計取得

Expand Down Expand Up @@ -1959,6 +1980,32 @@ def get_worktime_statistics(self, project_id: str, **kwargs) -> Tuple[Any, reque
keyword_params: Dict[str, Any] = {}
return self._request_wrapper(http_method, url_path, **keyword_params)

def put_markers(self, project_id: str, request_body: Optional[Any] = None,
**kwargs) -> Tuple[Any, requests.Response]:
"""統計グラフマーカー更新


authorizations: ProjectOwner



Args:
project_id (str): プロジェクトID (required)
request_body (Any): Request Body
put_markers_request (PutMarkersRequest): (required)

Returns:
Tuple[Markers, requests.Response]


"""
url_path = f'/projects/{project_id}/statistics/markers'
http_method = 'PUT'
keyword_params: Dict[str, Any] = {
'request_body': request_body,
}
return self._request_wrapper(http_method, url_path, **keyword_params)

#########################################
# Public Method : AfSupplementaryApi
# NOTE: This method is auto generated by OpenAPI Generator
Expand Down
72 changes: 71 additions & 1 deletion annofabapi/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@

"""

MakerId = NewType('MakerId', str)
"""

Example:
``12345678-abcd-1234-abcd-1234abcd5678``

"""

JobId = NewType('JobId', str)
"""

Expand Down Expand Up @@ -1415,6 +1423,23 @@ class AssigneeRuleOfResubmittedTask(Enum):

"""


class GraphType(Enum):
"""
* `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` - メンバー別動画一分当たりの作業時間平均
"""

TASK_PROGRESS = "task_progress"
CUMULATIVE_LABOR_TIME_BY_TASK_PHASE = "cumulative_labor_time_By_task_phase"
NUMBER_OF_INSPECTIONS_PER_INSPECTION_PHRASE = "number_of_inspections_per_inspection_phrase"
NUMBER_OF_TASK_REJECTIONS_BY_MEMBER = "number_of_task_rejections_by_member"
LABOR_TIME_PER_MEMBER = "labor_time_per_member"
MEAN_LABOR_TIME_PER_IMAGE = "mean_labor_time_per_image"
MEAN_LABOR_TIME_PER_MINUTE_OF_MOVIE = "mean_labor_time_per_minute_of_movie"
MEAN_LABOR_TIME_PER_IMAGE_BY_MEMBER = "mean_labor_time_per_image_by_member"
MEAN_LABOR_TIME_PER_MINUTE_OF_MOVIE_BY_MEMBER = "mean_labor_time_per_minute_of_movie_by_member"


HistogramItem = Dict[str, Any]
"""

Expand Down Expand Up @@ -2176,6 +2201,38 @@ class JobType(Enum):
* token: Token


"""

Marker = Dict[str, Any]
"""


Kyes of Dict

* marker_id: str
マーカーID。[値の制約についてはこちら。](#section/API-Convention/APIID)
* title: str

* graph_type: GraphType

* marked_at: str
グラフ上のマーカー位置(x軸)

"""

Markers = Dict[str, Any]
"""


Kyes of Dict

* project_id: str
プロジェクトID。[値の制約についてはこちら。](#section/API-Convention/APIID)
* markers: List[Marker]

* updated_datetime: str


"""

Message = Dict[str, Any]
Expand Down Expand Up @@ -2650,6 +2707,19 @@ class ProjectStatus(Enum):
* tasks: List[ProjectTaskStatistics]


"""

PutMarkersRequest = Dict[str, Any]
"""


Kyes of Dict

* markers: List[Marker]

* last_updated_datetime: str
新規作成時は未指定、更新時は必須(更新前の日時)

"""

PutMyAccountRequest = Dict[str, Any]
Expand Down Expand Up @@ -2965,7 +3035,7 @@ class SupplementaryDataType(Enum):
* updated_datetime: str

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

"""

Expand Down
1 change: 1 addition & 0 deletions generate/generate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ declare -a model_files=(${MODELS_DIR}/project_task_statistics.py ${MODELS_DIR}/p
${MODELS_DIR}/phase_statistics.py ${MODELS_DIR}/task_phase_statistics.py \
${MODELS_DIR}/label_statistics.py \
${MODELS_DIR}/histogram_item.py ${MODELS_DIR}/worktime_statistics_item.py ${MODELS_DIR}/account_worktime_statistics.py ${MODELS_DIR}/worktime_statistics.py \
${MODELS_DIR}/graph_type.py ${MODELS_DIR}/marker.py ${MODELS_DIR}/markers.py
)
cat partial-header/dataclass/common.py partial-header/dataclass/statistics.py \
${model_files[@]} > ../annofabapi/dataclass/statistics.py
Expand Down
8 changes: 8 additions & 0 deletions generate/partial-header/models_partial_header_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,14 @@

"""

MakerId = NewType('MakerId', str)
"""

Example:
``12345678-abcd-1234-abcd-1234abcd5678``

"""

JobId = NewType('JobId', str)
"""

Expand Down
Loading