def filter_inspection_list( self, project_id: str, inspection_comment_list: List[Inspection], task_id_list: Optional[List[str]] = None, filter_inspection_comment: Optional[FilterInspectionFunc] = None, ) -> List[Inspection]: """ 引数の検査コメント一覧に`commenter_username`など、ユーザが知りたい情報を追加する。 Args: inspection_list: 検査コメント一覧 filter_inspection: 検索コメントを絞り込むための関数 Returns: 情報が追加された検査コメント一覧 """ def filter_task_id(e): if task_id_list is None or len(task_id_list) == 0: return True return e["task_id"] in task_id_list def filter_local_inspection_comment(e): if filter_inspection_comment is None: return True return filter_inspection_comment(e) inspection_list = [ e for e in inspection_comment_list if filter_local_inspection_comment(e) and filter_task_id(e) ] visualize = AddProps(self.service, project_id) return [ visualize.add_properties_to_inspection(e) for e in inspection_list ]
class PrintInspections(AbstractCommandLineInterface): """ 検査コメント一覧を出力する。 """ def __init__(self, service: annofabapi.Resource, facade: AnnofabApiFacade, args: argparse.Namespace): super().__init__(service, facade, args) self.visualize = AddProps(self.service, args.project_id) def filter_inspection_list( self, inspection_list: List[Inspection], task_id_list: Optional[List[str]] = None, arg_filter_inspection: Optional[FilterInspectionFunc] = None, ) -> List[Inspection]: """ 引数の検査コメント一覧に`commenter_username`など、ユーザが知りたい情報を追加する。 Args: inspection_list: 検査コメント一覧 filter_inspection: 検索コメントを絞り込むための関数 Returns: 情報が追加された検査コメント一覧 """ def filter_task_id(e): if task_id_list is None or len(task_id_list) == 0: return True return e["task_id"] in task_id_list def filter_inspection(e): if arg_filter_inspection is None: return True return arg_filter_inspection(e) inspection_list = [e for e in inspection_list if filter_inspection(e) and filter_task_id(e)] return [self.visualize.add_properties_to_inspection(e) for e in inspection_list] def print_inspections( self, project_id: str, task_id_list: List[str], filter_inspection: Optional[FilterInspectionFunc] = None, ): """ 検査コメントを出力する Args: project_id: 対象のproject_id task_id_list: 受け入れ完了にするタスクのtask_idのList filter_inspection: 検索コメントを絞り込むための関数 Returns: """ inspection_list = self.get_inspections( project_id, task_id_list=task_id_list, filter_inspection=filter_inspection ) logger.info(f"検査コメントの件数: {len(inspection_list)}") self.print_according_to_format(inspection_list) def get_inspections_by_input_data(self, project_id: str, task_id: str, input_data_id: str, input_data_index: int): """入力データごとに検査コメント一覧を取得する。 Args: project_id: task_id: input_data_id: input_data_index: タスク内のinput_dataの番号 Returns: 対象の検査コメント一覧 """ detail = {"input_data_index": input_data_index} inspectins, _ = self.service.api.get_inspections(project_id, task_id, input_data_id) return [self.visualize.add_properties_to_inspection(e, detail) for e in inspectins] def get_inspections( self, project_id: str, task_id_list: List[str], filter_inspection: Optional[FilterInspectionFunc] = None ) -> List[Inspection]: """検査コメント一覧を取得する。 Args: project_id: task_id_list: Returns: 対象の検査コメント一覧 """ all_inspections: List[Inspection] = [] for task_id in task_id_list: try: task, _ = self.service.api.get_task(project_id, task_id) input_data_id_list = task["input_data_id_list"] logger.info(f"タスク '{task_id}' に紐づく検査コメントを取得します。input_dataの個数 = {len(input_data_id_list)}") for input_data_index, input_data_id in enumerate(input_data_id_list): inspections = self.get_inspections_by_input_data( project_id, task_id, input_data_id, input_data_index ) if filter_inspection is not None: inspections = [e for e in inspections if filter_inspection(e)] all_inspections.extend(inspections) except requests.HTTPError as e: logger.warning(e) logger.warning(f"タスク task_id = {task_id} の検査コメントを取得できなかった。") return all_inspections def main(self): args = self.args task_id_list = annofabcli.common.cli.get_list_from_args(args.task_id) filter_inspection = create_filter_func(only_reply=args.only_reply, exclude_reply=args.exclude_reply) self.print_inspections( args.project_id, task_id_list, filter_inspection=filter_inspection, )