Source code for annofabapi.util.task_history

from typing import Any

import isodate

from annofabapi.pydantic_models.task_phase import TaskPhase


[docs] def find_rejected_task_history_indices(task_history_list: list[dict[str, Any]]) -> list[int]: """ 差し戻されたタスク履歴のインデックス番号(0始まり)を返します。 Args: task_history_list: `get_task_histories` APIのレスポンス Returns: 差し戻されたタスク履歴のインデックス番号のリスト """ index_list = [] for index, history in enumerate(task_history_list): # 検査/受入フェーズで作業が行われているか if not ( history["phase"] in {TaskPhase.INSPECTION.value, TaskPhase.ACCEPTANCE.value} and isodate.parse_duration(history["accumulated_labor_time_milliseconds"]).total_seconds() > 0 and history["account_id"] is not None and history["started_datetime"] is not None and history["ended_datetime"] is not None ): continue # 直後の履歴が教師付フェーズならば、差し戻されたとみなす next_index = index + 1 if next_index >= len(task_history_list): # 対象の履歴は最後の履歴 continue next_history = task_history_list[next_index] if next_history["phase"] == TaskPhase.ANNOTATION.value: index_list.append(index) return index_list
[docs] def get_task_creation_datetime(task: dict[str, Any], task_history_list: list[dict[str, Any]]) -> str: """タスクが作成された日時を取得します。 Args: task: タスク情報。 タスクが作成された直後は ``task_history_list`` に有効な日時が格納されていないので、 ``operation_updated_datetime`` をタスク作成日時とします。 task_history_list: ``get_task_histories`` APIのレスポンス Returns: タスクの作成日時 Notes: 2020-12-08以前に作成されたタスクでは、タスクの作成日時を取得できません。 2020-12-08以前に作成されたタスクでは、先頭のタスク履歴は「タスク作成」ではなく、「教師付け作業」の履歴だからです。 https://annofab.com/docs/releases/2020.html#v01020 Raises: ValueError: 2020-12-08以前に作成されたタスクの情報を指定した場合 """ assert len(task_history_list) > 0 first_history = task_history_list[0] if ( first_history["account_id"] is None and first_history["accumulated_labor_time_milliseconds"] == "PT0S" and first_history["phase"] == TaskPhase.ANNOTATION.value ): if len(task_history_list) == 1: # 一度も作業されていないタスクは、先頭のタスク履歴のstarted_datetimeはNoneである # 替わりにタスクの`operation_updated_datetime`をタスク作成日時とする assert task["operation_updated_datetime"] is not None return task["operation_updated_datetime"] assert first_history["started_datetime"] is not None return first_history["started_datetime"] raise ValueError("2020-12-08以前に作成されたタスクのため、タスクの作成日時を取得できません。")