def validate(args: argparse.Namespace) -> bool: COMMON_MESSAGE = "annofabcli experimental find_break_error: error:" if args.import_file_path is not None: if not Path(args.import_file_path).is_file(): print( f"{COMMON_MESSAGE} argument --import_file_path: ファイルパスが存在しません\ '{args.import_file_path}'", file=sys.stderr, ) return False project_id_list = get_list_from_args(args.project_id) if len(project_id_list) > 1 and args.task_id: print( f"{COMMON_MESSAGE} argument --project_id: task_idを指定した場合はproject_idは複数指定できません\ '{args.project_id}'", file=sys.stderr, ) return False if args.task_id and len(args.task_id) > 1 and args.time: print( f"{COMMON_MESSAGE} argument --task_id: timeを指定した場合はtask_idは複数指定できません\ '{args.project_id}'", file=sys.stderr, ) return False return True
def main(args): not_masked_biography_set = ( set(get_list_from_args(args.not_masked_biography)) if args.not_masked_biography is not None else None ) not_masked_user_id_set = ( set(get_list_from_args(args.not_masked_user_id)) if args.not_masked_user_id is not None else None ) mask_visualization_dir( project_dir=args.dir, not_masked_biography_set=not_masked_biography_set, not_masked_user_id_set=not_masked_user_id_set, output_dir=args.output_dir, minimal_output=args.minimal, exclude_masked_user_for_linegraph=args.exclude_masked_user_for_linegraph, )
def main(self): args = self.args annotation_path: Path = args.annotation # Simpleアノテーションの読み込み if annotation_path.is_file(): iter_parser = lazy_parse_simple_annotation_zip(annotation_path) else: iter_parser = lazy_parse_simple_annotation_dir(annotation_path) df = pandas.read_csv( args.input_data_id_csv, sep=",", header=None, names=("input_data_id", "image_path"), ) input_data_id_relation_dict = dict( zip(df["input_data_id"], df["image_path"])) task_query = (TaskQuery.from_dict( annofabcli.common.cli.get_json_from_args(args.task_query)) if args.task_query is not None else None) draw_annotation_all( iter_parser=iter_parser, image_dir=args.image_dir, input_data_id_relation_dict=input_data_id_relation_dict, output_dir=args.output_dir, target_task_ids=get_list_from_args(args.task_id) if args.task_id is not None else None, task_query=task_query, label_color_dict=self._create_label_color(args.label_color) if args.label_color is not None else None, target_label_names=get_list_from_args(args.label_name) if args.label_name is not None else None, polyline_labels=get_list_from_args(args.polyline_label) if args.polyline_label is not None else None, drawing_options=DrawingOptions.from_dict( get_json_from_args(args.drawing_options)) if args.drawing_options is not None else None, )
def main(self) -> None: args = self.args arg_user_id_list = get_list_from_args(args.user_id) if args.user_id is not None else None project_id_list = get_list_from_args(args.project_id) if args.project_id is not None else None organization_name_list = get_list_from_args(args.organization) if args.organization is not None else None start_date, end_date = self.get_start_and_end_date_from_args(args) output_dir = Path(args.output_dir) output_dir.mkdir(exist_ok=True, parents=True) mian_obj = ListWorktimeByUserMain(self.service) mian_obj.main( organization_name_list=organization_name_list, project_id_list=project_id_list, start_date=start_date, end_date=end_date, output_dir=output_dir, user_id_list=arg_user_id_list, add_availability=args.add_availability, add_monitored_worktime=args.add_monitored_worktime, )
def main(self) -> None: args = self.args target_dir: Path = args.dir user_id_list = get_list_from_args(args.user_id) if args.user_id is not None else None df_user = create_user_df(target_dir) result = create_rating_df( df_user, target_dir, threshold_worktime=args.threshold_worktime, threshold_task_count=args.threshold_task_count, ) output_dir: Path = args.output_dir # output_csv(result, output_dir) output_rank_csv(result, output_dir, user_id_list=user_id_list) output_deviation_csv( result, output_dir, threshold_deviation_user_count=args.threshold_deviation_user_count, user_id_list=user_id_list, ) output_basic_statistics_by_project(result, output_dir)
def __init__(self, service: annofabapi.Resource, facade: AnnofabApiFacade, args: argparse.Namespace): super().__init__(service, facade, args) project_id_list = get_list_from_args(args.project_id) self.project_id_list = list(set(project_id_list))
def main(self): args = self.args if not self.validate(args): return format_target = FormatTarget(args.format) time_unit = TimeUnitTarget(args.time_unit) start_date = datetime.datetime.strptime(args.start_date, "%Y-%m-%d").date() end_date = datetime.datetime.strptime(args.end_date, "%Y-%m-%d").date() user_id_list = get_list_from_args( args.user_id) if args.user_id is not None else None total_df = pd.DataFrame([]) # プロジェクトごとにデータを取得 project_id_list = get_list_from_args(args.project_id) logger.info(f"{len(project_id_list)} 件のプロジェクトを取得します。") for i, project_id in enumerate(list(set(project_id_list))): logger.debug(f"{i + 1} 件目: project_id = {project_id}") try: afaw_time_df = self.list_labor_worktime( project_id, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d")) total_df = pd.concat([total_df, afaw_time_df], sort=True) except Exception as e: # pylint: disable=broad-except logger.error(e) logger.error(f"プロジェクトにアクセスできませんでした(project_id={project_id} )。") # データが無い場合にはwarning if len(total_df) == 0: logger.warning(f"対象プロジェクトの労務管理情報・作業情報が0件のため、出力しません。") return total_df = refine_df(total_df, start_date, end_date, user_id_list) if len(total_df) == 0: logger.warning(f"対象期間の労務管理情報・作業情報が0件のため、出力しません。") return # 時間単位変換 total_df = timeunit_conversion(df=total_df, time_unit=time_unit) # フォーマット別に出力dfを作成 if format_target == FormatTarget.BY_NAME_TOTAL: df = print_byname_total_list(total_df) elif format_target == FormatTarget.TOTAL: df = print_total(total_df) elif format_target == FormatTarget.COLUMN_LIST_PER_PROJECT: df = create_column_list_per_project(total_df) elif format_target == FormatTarget.COLUMN_LIST: df = create_column_list(total_df) elif format_target == FormatTarget.DETAILS: df = print_time_list_from_work_time_list(total_df) else: raise RuntimeError(f"format_target='{format_target}'は対象外です。") # 出力先別に出力 if args.output: out_format = args.output else: out_format = sys.stdout self._output( out_format, df, index=(format_target == FormatTarget.DETAILS), add_project_id=args.add_project_id, project_id_list=project_id_list, )