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
2 changes: 1 addition & 1 deletion annofabapi/__version__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.29.5'
__version__ = '0.30.0'
30 changes: 15 additions & 15 deletions annofabapi/dataclass/instruction.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ class Instruction:

"""
html: Optional[str]
""""""
"""作業ガイドのHTML"""

last_updated_datetime: Optional[str]
"""* `GetInstruction` の場合: 最後に作業ガイドを更新した日時。 * `PutInstruction` の場合: 最後に作業ガイドを更新した日時を指定する。まだ一度も保存した事がない場合は指定しない。 """
"""* [getInstruction](#operation/getInstruction) APIのレスポンスの場合: 最後に作業ガイドを更新した日時。 * [putInstruction](#operation/putInstruction) APIのリクエストボディの場合: 最後に作業ガイドを更新した日時を指定する。まだ一度も保存した事がない場合は指定しない。 """


@dataclass_json
Expand All @@ -34,14 +34,14 @@ class InstructionHistory:
"""

"""
history_id: Optional[str]
""""""
history_id: str
"""作業ガイドの履歴ID"""

account_id: Optional[str]
""""""
account_id: str
"""作業ガイドを更新したユーザのアカウントID"""

updated_datetime: Optional[str]
""""""
updated_datetime: str
"""作業ガイドの最終更新日時"""


@dataclass_json
Expand All @@ -50,14 +50,14 @@ class InstructionImage:
"""

"""
image_id: Optional[str]
""""""
image_id: str
"""作業ガイド画像ID"""

path: Optional[str]
""""""
path: str
"""作業ガイド画像の実体が保存されたパスです。 """

url: Optional[str]
""""""
url: str
"""作業ガイド画像を取得するための内部用URLです。"""

etag: Optional[str]
etag: str
""""""
8 changes: 4 additions & 4 deletions annofabapi/generated_api.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion annofabapi/generated_api2.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def get_project_cache_v2(self, project_id: str, **kwargs) -> Tuple[Any, requests
project_id (str): プロジェクトID (required)

Returns:
Tuple[CacheRecord, requests.Response]
Tuple[ProjectCacheRecord, requests.Response]


"""
Expand Down
81 changes: 48 additions & 33 deletions annofabapi/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -915,31 +915,6 @@ class AssigneeRuleOfResubmittedTask(Enum):
* type: str
`Delete` [詳しくはこちら](#section/API-Convention/API-_type)

"""

CacheRecord = Dict[str, Any]
"""


Kyes of Dict

* input: str

* members: str

* project: str

* instruction: str

* specs: str

* statistics: str

* organization: str

* supplementary: str


"""

ChangePasswordRequest = Dict[str, Any]
Expand Down Expand Up @@ -2086,9 +2061,9 @@ class InspectionSummary(Enum):
Kyes of Dict

* html: str

作業ガイドのHTML
* last_updated_datetime: str
* `GetInstruction` の場合: 最後に作業ガイドを更新した日時。 * `PutInstruction` の場合: 最後に作業ガイドを更新した日時を指定する。まだ一度も保存した事がない場合は指定しない。
* [getInstruction](#operation/getInstruction) APIのレスポンスの場合: 最後に作業ガイドを更新した日時。 * [putInstruction](#operation/putInstruction) APIのリクエストボディの場合: 最後に作業ガイドを更新した日時を指定する。まだ一度も保存した事がない場合は指定しない。

"""

Expand All @@ -2099,11 +2074,11 @@ class InspectionSummary(Enum):
Kyes of Dict

* history_id: str

作業ガイドの履歴ID
* account_id: str

作業ガイドを更新したユーザのアカウントID
* updated_datetime: str

作業ガイドの最終更新日時

"""

Expand All @@ -2114,14 +2089,27 @@ class InspectionSummary(Enum):
Kyes of Dict

* image_id: str

作業ガイド画像ID
* path: str

作業ガイド画像の実体が保存されたパスです。
* url: str

作業ガイド画像を取得するための内部用URLです。
* etag: str


"""

InstructionImagePath = Dict[str, Any]
"""


Kyes of Dict

* url: str
ファイルアップロード用の一時URLです。このURLにファイルをアップロードします。
* path: str
作業ガイド画像のURL

"""

InternationalizationMessage = Dict[str, Any]
Expand Down Expand Up @@ -2796,6 +2784,31 @@ class PricePlan(Enum):
* worktime: str
作業時間(ISO 8601 duration)

"""

ProjectCacheRecord = Dict[str, Any]
"""


Kyes of Dict

* input: str

* members: str

* project: str

* instruction: str

* specs: str

* statistics: str

* organization: str

* supplementary: str


"""

ProjectConfiguration = Dict[str, Any]
Expand Down Expand Up @@ -3547,6 +3560,8 @@ class TaskAssignmentType(Enum):
タスクの最終更新日時
* account_id: str
変更後の担当者のアカウントID。担当者を未割り当てにする場合は未指定。
* force: bool
タスクの強制操作を行う場合に立てるフラグ。現在、強制操作は強制差戻しのみがサポートされています。

"""

Expand Down
54 changes: 43 additions & 11 deletions annofabapi/wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ class AnnotationSpecsRelation:
choice_id: Dict[ChoiceKey, ChoiceKey]


def __first_true(iterable, default=None, pred=None):
def _first_true(iterable, default=None, pred=None):
return next(filter(pred, iterable), default)


Expand Down Expand Up @@ -298,7 +298,8 @@ def copy_annotation(self, src: TaskFrameKey, dest: TaskFrameKey, account_id: str
src: コピー元のTaskFrame情報
dest: コピー先のTaskFrame情報
account_id: アノテーションを登録するユーザのアカウントID
annotation_specs_relation: アノテーション仕様間の紐付け情報
annotation_specs_relation: アノテーション仕様間の紐付け情報。``get_annotation_specs_relation`` メソッドで紐付け情報を取得できる。
Noneの場合、コピー元のアノテーション仕様のID情報(ラベルID、属性ID、選択肢ID)を変換せずに、アノテーションをコピーします。

Returns:
アノテーションのコピー実施したかどうか
Expand Down Expand Up @@ -370,11 +371,42 @@ def __get_choice_name_en(choice: Dict[str, Any]) -> str:
messages = choice["name"]["messages"]
return [e["message"] for e in messages if e["lang"] == "en-US"][0]

def __get_dest_additional(self, src_additional: Dict[str, Any], dest_additionals: List[Dict[str, Any]],
src_labels: List[Dict[str, Any]], dest_labels: List[Dict[str, Any]],
dict_label_id: Dict[str, str]) -> Optional[Dict[str, Any]]:
src_additional_name_en = self.__get_additional_data_definition_name_en(src_additional)
for dest_additional in dest_additionals:
if src_additional_name_en != self.__get_additional_data_definition_name_en(dest_additional):
continue

dest_label_contains_dest_additional = True
for src_label in src_labels:
if src_additional["additional_data_definition_id"] in src_label["additional_data_definitions"]:
dest_label_id = dict_label_id.get(src_label["label_id"])
if dest_label_id is None:
dest_label_contains_dest_additional = False
break

dest_label = _first_true(dest_labels, pred=lambda e, f=dest_label_id: e["label_id"] == f)
if dest_label is None:
dest_label_contains_dest_additional = False
break
if dest_additional["additional_data_definition_id"] not in dest_label[
"additional_data_definitions"]:
dest_label_contains_dest_additional = False
break

if dest_label_contains_dest_additional:
return dest_additional

return None

def get_annotation_specs_relation(self, src_project_id: str, dest_project_id: str) -> AnnotationSpecsRelation:
"""
プロジェクト間のアノテーション仕様の紐付け情報を取得する。ラベル、属性、選択肢の英語名で紐付ける。
プロジェクト間のアノテーション仕様の紐付け情報を取得する。
ラベル、属性、選択肢の英語名で紐付ける。
ただし、属性は、参照されるラベルが一致していることも判定する。
紐付け先がない場合は無視する。
``copy_annotation`` メソッドで利用する。

Args:
src_project_id: 紐付け元のプロジェクトID
Expand All @@ -392,17 +424,17 @@ def get_annotation_specs_relation(self, src_project_id: str, dest_project_id: st
dict_label_id: Dict[str, str] = {}
for src_label in src_annotation_specs["labels"]:
src_label_name_en = self.__get_label_name_en(src_label)
dest_label = __first_true(dest_labels, pred=lambda e, f=src_label_name_en: self.__get_label_name_en(e) == f)
dest_label = _first_true(dest_labels, pred=lambda e, f=src_label_name_en: self.__get_label_name_en(e) == f)
if dest_label is not None:
dict_label_id[src_label["label_id"]] = dest_label["label_id"]

dict_additional_data_definition_id: Dict[str, str] = {}
dict_choice_id: Dict[ChoiceKey, ChoiceKey] = {}
for src_additional in src_annotation_specs["additionals"]:
src_additional_name_en = self.__get_additional_data_definition_name_en(src_additional)
dest_additional = __first_true(
dest_additionals,
pred=lambda e, f=src_additional_name_en: self.__get_additional_data_definition_name_en(e) == f)
dest_additional = self.__get_dest_additional(src_additional=src_additional,
dest_additionals=dest_additionals,
src_labels=src_annotation_specs["labels"],
dest_labels=dest_labels, dict_label_id=dict_label_id)
if dest_additional is None:
continue

Expand All @@ -412,8 +444,8 @@ def get_annotation_specs_relation(self, src_project_id: str, dest_project_id: st
dest_choices = dest_additional["choices"]
for src_choice in src_additional["choices"]:
src_choice_name_en = self.__get_choice_name_en(src_choice)
dest_choice = __first_true(dest_choices,
pred=lambda e, f=src_choice_name_en: self.__get_choice_name_en(e) == f)
dest_choice = _first_true(dest_choices,
pred=lambda e, f=src_choice_name_en: self.__get_choice_name_en(e) == f)
if dest_choice is not None:
dict_choice_id[ChoiceKey(src_additional["additional_data_definition_id"],
src_choice["choice_id"])] = ChoiceKey(
Expand Down
48 changes: 45 additions & 3 deletions generate/swagger/swagger-api-components.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@
schema:
$ref: "#/components/schemas/ErrorRefreshTokenExpired"
schemas:
CacheRecord:
ProjectCacheRecord:
type: object
properties:
input:
Expand Down Expand Up @@ -2480,6 +2480,11 @@
allOf:
- $ref: "#/components/schemas/AccountId"
description: 変更後の担当者のアカウントID。担当者を未割り当てにする場合は未指定。
force:
type: boolean
default: false
description: |
タスクの強制操作を行う場合に立てるフラグ。現在、強制操作は強制差戻しのみがサポートされています。
TaskStart:
type: object
properties:
Expand Down Expand Up @@ -2912,6 +2917,22 @@
type: string
example: s3://<ANNOFAB-TEMPORARY-BUCKET-NAME>/<UUID>/<UUID>
description: アップロードしたファイルをAFの [入力データ](#tag/af-input) や [補助情報](#tag/af-supplementary) に登録するとき、この`path`を指定します。
InstructionImagePath:
type: object
required:
- url
- path
properties:
url:
type: string
format: uri
example: "https://s3.<REGION>.amazonaws.com/<ANNOFAB-TEMP-BUCKET>/<UUID>/<UUID>?param1=...&param2=..."
description: ファイルアップロード用の一時URLです。このURLにファイルをアップロードします。
path:
type: string
format: url
example: https://annofab.com/projects/{project_id}/instruction-images/{image_id}
description: 作業ガイド画像のURL
AnnotationQuery:
type: object
properties:
Expand Down Expand Up @@ -3805,32 +3826,53 @@
properties:
html:
type: string
description: 作業ガイドのHTML
example: "<p>test</p>"
last_updated_datetime:
type: string
format: date-time
description: |
* `GetInstruction` の場合: 最後に作業ガイドを更新した日時。
* `PutInstruction` の場合: 最後に作業ガイドを更新した日時を指定する。まだ一度も保存した事がない場合は指定しない。
* [getInstruction](#operation/getInstruction) APIのレスポンスの場合: 最後に作業ガイドを更新した日時。
* [putInstruction](#operation/putInstruction) APIのリクエストボディの場合: 最後に作業ガイドを更新した日時を指定する。まだ一度も保存した事がない場合は指定しない。
InstructionHistory:
type: object
required:
- history_id
- account_id
- updated_datetime
properties:
history_id:
type: string
description: 作業ガイドの履歴ID
account_id:
type: string
description: 作業ガイドを更新したユーザのアカウントID
updated_datetime:
type: string
format: date-time
description: 作業ガイドの最終更新日時
InstructionImage:
type: object
required:
- image_id
- path
- url
- etag
properties:
image_id:
type: string
description: 作業ガイド画像ID
path:
type: string
example: "s3://ANNOFAB-BUCKET/PATH/TO/INSTRUCTION_IMAGE"
description: |
作業ガイド画像の実体が保存されたパスです。
url:
type: string
format: uri
example: https://annofab.com/projects/{project_id}/instruction-images/{image_id}
description:
作業ガイド画像を取得するための内部用URLです。
etag:
type: string
ValidationError:
Expand Down
Loading