Skip to content

Commit

Permalink
comment put_inspection : --jsonで渡したファイルの検査コメントが一部読み込まれない問題の修正 (#1270
Browse files Browse the repository at this point in the history
)

* 不具合修正

* ログメッセージの修正

* update
  • Loading branch information
yuji38kwmt authored Sep 19, 2024
1 parent 0c62127 commit 878d7fb
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 28 deletions.
60 changes: 33 additions & 27 deletions annofabcli/comment/put_comment.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from annofabcli.comment.utils import get_comment_type_name
from annofabcli.common.cli import CommandLineWithConfirm
from annofabcli.common.facade import AnnofabApiFacade
from annofabcli.common.type_util import assert_noreturn

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -109,13 +110,13 @@ def change_to_working_status(self, project_id: str, task: Dict[str, Any]) -> Dic
try:
if task["account_id"] != self.service.api.account_id:
self.service.wrapper.change_task_operator(project_id, task_id, self.service.api.account_id)
logger.debug(f"{task_id}: 担当者を自分自身に変更しました。")
logger.debug(f"task_id='{task_id}' :: 担当者を自分自身に変更しました。")

changed_task = self.service.wrapper.change_task_status_to_working(project_id, task_id)
return changed_task # noqa: TRY300

except requests.HTTPError:
logger.warning(f"{task_id}: 担当者の変更、または作業中状態への変更に失敗しました。", exc_info=True)
logger.warning(f"task_id='{task_id}' :: 担当者の変更、または作業中状態への変更に失敗しました。", exc_info=True)
raise

def _can_add_comment(
Expand All @@ -126,12 +127,12 @@ def _can_add_comment(

if self.comment_type == CommentType.INSPECTION: # noqa: SIM102
if task["phase"] == TaskPhase.ANNOTATION.value:
logger.warning(f"task_id='{task_id}': 教師付フェーズなので、検査コメントを付与できません。")
logger.warning(f"task_id='{task_id}' :: フェーズが検査/受入でないため検査コメントを付与できません。 :: task_phase='{task['phase']}'")
return False

if task["status"] not in [TaskStatus.NOT_STARTED.value, TaskStatus.WORKING.value, TaskStatus.BREAK.value]:
logger.warning(
f"task_id='{task_id}' : タスクの状態が未着手,作業中,休憩中 以外の状態なので、コメントを付与できません。task_status='{task['status']}'" # noqa: E501
f"task_id='{task_id}' :: タスクの状態が未着手,作業中,休憩中 以外の状態なので、コメントを付与できません。 :: task_status='{task['status']}'" # noqa: E501
)
return False
return True
Expand All @@ -151,16 +152,16 @@ def add_comments_for_task(
task_index: タスクの連番
Returns:
付与したコメントの数
コメントを付与した入力データの個数
"""
logging_prefix = f"{task_index+1} 件目" if task_index is not None else ""

task = self.service.wrapper.get_task_or_none(self.project_id, task_id)
if task is None:
logger.warning(f"{logging_prefix} : task_id='{task_id}' のタスクは存在しないので、スキップします。")
logger.warning(f"{logging_prefix} :: task_id='{task_id}' のタスクは存在しないので、スキップします。")
return 0

logger.debug(f"{logging_prefix} : task_id = {task['task_id']}, status = {task['status']}, phase = {task['phase']}, ")
logger.debug(f"{logging_prefix} : task_id='{task['task_id']}', status='{task['status']}', phase='{task['phase']}'")

if not self._can_add_comment(
task=task,
Expand All @@ -175,25 +176,28 @@ def add_comments_for_task(
added_comments_count = 0
for input_data_id, comments in comments_for_task.items():
if input_data_id not in task["input_data_id_list"]:
logger.warning(f"{logging_prefix} : task_id='{task_id}'のタスクに input_data_id='{input_data_id}'の入力データは存在しません。")
logger.warning(f"{logging_prefix} :: task_id='{task_id}'のタスクに input_data_id='{input_data_id}'の入力データは存在しません。")
continue
try:
# コメントを付与する
request_body = self._create_request_body(task=changed_task, input_data_id=input_data_id, comments=comments)
self.service.api.batch_update_comments(self.project_id, task_id, input_data_id, request_body=request_body)
added_comments_count += 1
logger.debug(f"{logging_prefix} : task_id={task_id}, input_data_id={input_data_id}: {len(comments)}件のコメントを付与しました。")
if len(comments) > 0:
request_body = self._create_request_body(task=changed_task, input_data_id=input_data_id, comments=comments)
self.service.api.batch_update_comments(self.project_id, task_id, input_data_id, request_body=request_body)
added_comments_count += 1
logger.debug(
f"{logging_prefix} :: task_id='{task_id}', input_data_id='{input_data_id}' :: {len(comments)}件のコメントを付与しました。"
)
except Exception: # pylint: disable=broad-except
logger.warning(
f"{logging_prefix} : task_id={task_id}, input_data_id={input_data_id}: コメントの付与に失敗しました。",
f"{logging_prefix} :: task_id={task_id}, input_data_id={input_data_id}: コメントの付与に失敗しました。",
exc_info=True,
)
finally:
self.service.wrapper.change_task_status_to_break(self.project_id, task_id)
# 担当者が変えている場合は、元に戻す
if task["account_id"] != changed_task["account_id"]:
self.service.wrapper.change_task_operator(self.project_id, task_id, task["account_id"])
logger.debug(f"{task_id}: 担当者を元のユーザ( account_id={task['account_id']})に戻しました。")

self.service.wrapper.change_task_status_to_break(self.project_id, task_id)
# 担当者が変えている場合は、元に戻す
if task["account_id"] != changed_task["account_id"]:
self.service.wrapper.change_task_operator(self.project_id, task_id, task["account_id"])
logger.debug(f"{logging_prefix} :: task_id='{task_id}' :: 担当者を元のユーザ( account_id='{task['account_id']}')に戻しました。")

return added_comments_count

Expand Down Expand Up @@ -232,7 +236,7 @@ def add_comments_for_task_list(
)
added_comments_count += result
except Exception: # pylint: disable=broad-except
logger.warning(f"task_id={task_id}: コメントの付与に失敗しました。", exc_info=True)
logger.warning(f"task_id='{task_id}' :: コメントの付与に失敗しました。", exc_info=True)
continue

logger.info(f"{added_comments_count} / {comments_count} 件の入力データに{self.comment_type_name}を付与しました。")
Expand Down Expand Up @@ -286,10 +290,12 @@ def convert_onhold_comment(comment: dict[str, Any]) -> AddedComment:
elif comment_type == CommentType.ONHOLD:
func_convert = convert_onhold_comment
else:
raise RuntimeError(f"{comment_type=}が無効な値です。")

return {
task_id: {input_data_id: [func_convert(e) for e in comments]}
for task_id, comments_for_task in dict_comments.items()
for input_data_id, comments in comments_for_task.items()
}
assert_noreturn(comment_type)

result = {}
for task_id, comments_for_task in dict_comments.items():
sub_result = {
input_data_id: [func_convert(e) for e in comments] for input_data_id, comments in comments_for_task.items() if len(comments) > 0
}
result.update({task_id: sub_result})
return result
1 change: 0 additions & 1 deletion annofabcli/comment/put_inspection_comment.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ def main(self) -> None:

dict_comments = annofabcli.common.cli.get_json_from_args(args.json)
comments_for_task_list = convert_cli_comments(dict_comments, comment_type=CommentType.INSPECTION)

main_obj = PutCommentMain(self.service, project_id=args.project_id, comment_type=CommentType.INSPECTION, all_yes=self.all_yes)
main_obj.add_comments_for_task_list(
comments_for_task_list=comments_for_task_list,
Expand Down
6 changes: 6 additions & 0 deletions annofabcli/common/type_util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from typing import NoReturn


def assert_noreturn(x: NoReturn) -> NoReturn:
"""python 3.11 以降に追加されたassert_neverの代わり"""
raise AssertionError(f"Invalid value: {x!r}") # x!rは repr(x)と等価

0 comments on commit 878d7fb

Please sign in to comment.