annofabcli 1.107.0__py3-none-any.whl → 1.108.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,20 +3,21 @@ annofabcli/__main__.py,sha256=HSKErJxFZARMWsH6GadYeyzcH5YBcZVDsy06wYGTo5c,5431
3
3
  annofabcli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  annofabcli/annotation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  annofabcli/annotation/annotation_query.py,sha256=jd69b_QBw8fy0i_bk-3MGNarS_W0XjCDJa1T4GSZjvk,15730
6
- annofabcli/annotation/change_annotation_attributes.py,sha256=pCHT12ba5jsT9kqslUXqfy2QriRT8yiAzgHDuL1JkNE,17884
6
+ annofabcli/annotation/change_annotation_attributes.py,sha256=WKVJcAePT6a1ToOf81Q58_7KvTaz_kyhKX7eaOsaf-c,17886
7
7
  annofabcli/annotation/change_annotation_attributes_per_annotation.py,sha256=g_SqH1xzAdA8D1Hy1aoOPlpF86nc7F1PENeUX8XftDs,15529
8
8
  annofabcli/annotation/change_annotation_properties.py,sha256=Kp_LZ5sSoVmmjGE80ABVO3InxsXBIxiFFvVcIJNsOMk,18309
9
9
  annofabcli/annotation/copy_annotation.py,sha256=Pih2k3vvpgfT3Ovb3gZw2L_8fK_ws_wKR7ARYG5hG_8,18407
10
- annofabcli/annotation/delete_annotation.py,sha256=hQApNrx2Ci1bBWk0dRGA0oJkIgDHwl6Jy0-33gYF6jo,22989
10
+ annofabcli/annotation/create_classification_annotation.py,sha256=Ex9kSVNHZu71UbLSAxZRE1y99p6T8vsCRleCLxCFWv8,18594
11
+ annofabcli/annotation/delete_annotation.py,sha256=bU87ov7NhYFPe-Cldn3nBSK_CY9A9x3mSLN1Ame-cKk,25144
11
12
  annofabcli/annotation/download_annotation_zip.py,sha256=SMtfxt6NKkpHGRDoKRCjPqpQB5DBpQ-PD2_3ts51h0Q,3314
12
13
  annofabcli/annotation/dump_annotation.py,sha256=Q-p6f5XBs7khDgrfY5Q3CGLBMKEerJWO_CQ8_73UXVM,9972
13
- annofabcli/annotation/import_annotation.py,sha256=cFLpWOSJHDCbLXJV607ywPlitHR6JemB4C9b8RWJxhw,35785
14
+ annofabcli/annotation/import_annotation.py,sha256=maaxlje3VZ7oN94gdtZFgfZnAQlBfYmljgGJzMcI9HE,35811
14
15
  annofabcli/annotation/list_annotation.py,sha256=uKcOuGC7lzd6vVbzizkiZtYdXJ7EzY0iifuiqKl2wQM,10707
15
16
  annofabcli/annotation/list_annotation_count.py,sha256=T9fbaoxWeDJIVgW_YgHRldbwrVZWiE-57lfJrDQrj80,6474
16
17
  annofabcli/annotation/merge_segmentation.py,sha256=kIsCeXtJxzd6nobQPpi0fscaRDlTx3tg1qpy5PDfSJI,18107
17
18
  annofabcli/annotation/remove_segmentation_overlap.py,sha256=JeeBY3PUcBqLYiNItEH8Ae9zhEy6cf4LldNr_4yBdjY,15991
18
19
  annofabcli/annotation/restore_annotation.py,sha256=4rrMYbC29HAsCxgcdOVDfZGcJgorbKDro6ewvDBjxwo,17064
19
- annofabcli/annotation/subcommand_annotation.py,sha256=PfiU4G_Col3quCXKbZpqWoUXGi5p2uB1XI9BKMwaq1I,2288
20
+ annofabcli/annotation/subcommand_annotation.py,sha256=Xd7v_GGWscIanU2mP5bnmcfxiUmy4ugPYg4z24ZuhZ8,2432
20
21
  annofabcli/annotation_specs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
22
  annofabcli/annotation_specs/add_attribute_restriction.py,sha256=jVA7ltharabR94bf71QuW0x0yVgu6-A7PHn7Dq3kUfg,6825
22
23
  annofabcli/annotation_specs/attribute_restriction.py,sha256=Ximx5BHK28raHC2WRwP2W6FfuPvCmHu3PGife9MoZHQ,10687
@@ -61,7 +62,7 @@ annofabcli/common/image.py,sha256=qUsQXEYmttT443BOiaxLthccE7hLji5toLjgSdneNWA,16
61
62
  annofabcli/common/pandas.py,sha256=Vyozu52UiZ0aCVtQ9jySxT_LrLMwpQvvpM8Uu3S2nCs,476
62
63
  annofabcli/common/type_util.py,sha256=i3r5pFtRYQwJrYkl1-lVQi8XOePQxTUX_cAHgBTsagM,224
63
64
  annofabcli/common/typing.py,sha256=_AcEogoaMbib0esfN2RvHshAZH0oyRb2Ro9-rbn7NJ8,330
64
- annofabcli/common/utils.py,sha256=Eb4DS5j_EVdZW_YnsvIgjTbgWcjHd560plck2_WgrCI,9545
65
+ annofabcli/common/utils.py,sha256=Qtx9ZGk4T5IQhndTLhVdU142By8IV_wBbLvHeBpE1sw,9648
65
66
  annofabcli/common/visualize.py,sha256=mBPCA5vfYNbE3I1m5oHRpo-E1hsNH11KswILtYRCOKQ,13650
66
67
  annofabcli/common/annofab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
67
68
  annofabcli/common/annofab/annotation_specs.py,sha256=h-YSnuK0riCLoJMmV-KDP3JS-_JMqx0feSvPAB3xCSI,765
@@ -78,7 +79,6 @@ annofabcli/filesystem/mask_user_info.py,sha256=j-6gZTMGARGy3wQNGGo4xORsl2HOlC64q
78
79
  annofabcli/filesystem/merge_annotation.py,sha256=D6rzbHwI675p5iKeN9HVa7792fDf6z9ap4Jg0RjFuBI,10522
79
80
  annofabcli/filesystem/subcommand_filesystem.py,sha256=ZM2td5iZYIQ3TCI-9xAue8LugFlIc3WMRXrJqnjJ8-s,1186
80
81
  annofabcli/input_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
- annofabcli/input_data/change_input_data_name.py,sha256=1ca4TqNj4Acg30lWC_vXSPNFe9iy84aYMJpE8Gd0dfc,9877
82
82
  annofabcli/input_data/copy_input_data.py,sha256=abt4yBsmMadB5yuwUajHnxnRcK64U1xZpG0PDTxJPhI,14487
83
83
  annofabcli/input_data/delete_input_data.py,sha256=IVlijroXVBRTsofY_q80ciRY4GiWGZvhFbWhoOMHOKM,8613
84
84
  annofabcli/input_data/delete_metadata_key_of_input_data.py,sha256=8-erhIKYxgRUSbAdQSsco2zO37_uqvzNBwbnFeKrVXQ,8344
@@ -88,7 +88,8 @@ annofabcli/input_data/list_all_input_data_merged_task.py,sha256=xs1uT9_ToQNA2luL
88
88
  annofabcli/input_data/list_input_data.py,sha256=Jz5tRDPBLE8CyPV85jmOGd2-aHELyAE4MGi7WVjZaDM,11335
89
89
  annofabcli/input_data/put_input_data.py,sha256=D2H5mW7fOQMlJmtKLHIT2S9jc_uHdPshI4oBRXsD3To,18955
90
90
  annofabcli/input_data/put_input_data_with_zip.py,sha256=SA4aMAwMBFgc9Lh0zmRCbmkXG4AMrcBqd5zeTSdr8lc,5566
91
- annofabcli/input_data/subcommand_input_data.py,sha256=X8EoxsF6PMiKrvk_r7PIe2D0WZuaPlgLJRuTiljPIdM,2048
91
+ annofabcli/input_data/subcommand_input_data.py,sha256=6c9Co92nzJFzDh8Ncq_9NGcB4VLgqEl-ey-p9sqNGL0,2038
92
+ annofabcli/input_data/update_input_data.py,sha256=Y7IXmeyuMYwk_PzQB5MoLe5MTSGpIeEJqwVAuAdaiTs,12905
92
93
  annofabcli/input_data/update_metadata_of_input_data.py,sha256=E4E-FZaQBmhmhMhddehhtVLxS26TsehZzHRI6Ccr8pc,11460
93
94
  annofabcli/input_data/utils.py,sha256=F3mYbWmRwXfEtiIo9dvSysfuZUdyQzJmmq94eM-C5IY,723
94
95
  annofabcli/instruction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -122,7 +123,8 @@ annofabcli/project/copy_project.py,sha256=O1TooJ0VVbRP84d4Y-8e6Z7pKMwhBEwPu3EBv1
122
123
  annofabcli/project/diff_projects.py,sha256=OsR0otV6MOCbUgGEDsYganu5cuHYZbpHbBAqujwBAw8,16531
123
124
  annofabcli/project/list_project.py,sha256=OWnbCyShI4ceugxML8kSAD2nkyld5MlpXfbvQu2__4Y,10367
124
125
  annofabcli/project/put_project.py,sha256=dsRJfx2ga4mmYci40q91UzXeQN6m_3fMU9mrcFRpY9Q,6033
125
- annofabcli/project/subcommand_project.py,sha256=Tpr-WOw1uCYNYKd-zpSL91j4RqXqjClJrjRVf23X4p4,1333
126
+ annofabcli/project/subcommand_project.py,sha256=i2EBEBUp-h--yzwFeg1V5T0iMB_oFp4X_M-zQdZoMRE,1447
127
+ annofabcli/project/update_configuration.py,sha256=Gnymx6SwnLARY8oSgVLbG9q7y6WRt06i5RQpv6LTcFI,6491
126
128
  annofabcli/project_member/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
129
  annofabcli/project_member/change_project_members.py,sha256=T7l7--T2Mb8zLKKfGq3qB-wiAie6rkt2V-iq9e2LDp4,9337
128
130
  annofabcli/project_member/copy_project_members.py,sha256=Rm98Ks0PE4zdoXqpu_itNLvBkh1d5x_J7CKjdTkhKLk,8839
@@ -146,7 +148,7 @@ annofabcli/statistics/list_annotation_attribute.py,sha256=lmvT3b1mVX4PRGWrBUfZaf
146
148
  annofabcli/statistics/list_annotation_attribute_filled_count.py,sha256=UF8wB-kfUnHCIPykb2Z2slyEcp9aHrzcbFbOs_3Z8-A,29341
147
149
  annofabcli/statistics/list_annotation_count.py,sha256=4uTRR63Db-WDGRQt3AC8mPaRfFgbG5d27A036GNG3D0,53151
148
150
  annofabcli/statistics/list_annotation_duration.py,sha256=WxHfzF4tYkveIdkaWoJZ6x7ddBMWkfz1YM_vxMub3jY,32165
149
- annofabcli/statistics/list_video_duration.py,sha256=OCDXPOP2z7flE8NBaQD1lDkU9JG5mn3PfACijoR-5s0,9163
151
+ annofabcli/statistics/list_video_duration.py,sha256=11DvuWgbJoxq7hXN7HRCWFjEAK_VG9C33QTSh7bJb0Y,9195
150
152
  annofabcli/statistics/list_worktime.py,sha256=nr--GtFY-oyFuu8M0EsUqcVxX26gjeP09LYUcdeptyk,6456
151
153
  annofabcli/statistics/scatter.py,sha256=C3hTlm_QfGBiY4KjZ-8D_u_Rk53a9f4jszx4iNZgp9w,10945
152
154
  annofabcli/statistics/subcommand_statistics.py,sha256=Pvd7s0vvDU9tSpAphPrv94IDhhR1p8iFH2tjdt7I7ZU,2536
@@ -189,7 +191,7 @@ annofabcli/task/cancel_acceptance.py,sha256=QG9GhGNfBXntqYTKdYjLUczjD4p_ATkPc_xY
189
191
  annofabcli/task/change_operator.py,sha256=q6pMd1SdsTRgMHS0705dnosTSHprTpYgXtNd0rli2Zg,11793
190
192
  annofabcli/task/change_status_to_break.py,sha256=hwdFTFW-zV0VxuinoBB5n6mvHJ7g9ChjrSOXZcNk88w,8621
191
193
  annofabcli/task/change_status_to_on_hold.py,sha256=vWRyk6IK3HcgTWDIbbhXzsrtuoa7OlXCf8CvUpFp_Uw,12981
192
- annofabcli/task/complete_tasks.py,sha256=ssg_Z7ADRQRXvXgK2k5TEmvbRjrJQ33cXeb8kG8Y3jc,24917
194
+ annofabcli/task/complete_tasks.py,sha256=ouTxqw5_MxLhwCkp_EcBThqA7MhHIZKQsfXxhRJut28,25145
193
195
  annofabcli/task/copy_tasks.py,sha256=EcaCaSzqddlSKSUYqDOD53-r1GFpIl38KL3FriSfMeI,8735
194
196
  annofabcli/task/delete_metadata_key_of_task.py,sha256=Cjqe3fWKeRzVxxlrGyt3TS-x1riD55LnNXLIS9JPoTw,8029
195
197
  annofabcli/task/delete_tasks.py,sha256=7T5eNCMW06ABekNGLwhTitDK5qn0tiPKrEXyJXyQNvs,13098
@@ -213,8 +215,8 @@ annofabcli/task_history_event/download_task_history_event_json.py,sha256=hQLVbQ0
213
215
  annofabcli/task_history_event/list_all_task_history_event.py,sha256=EeKMyPUxGwYCFtWQHHW954ZserGm8lUqrwNnV1iX9X4,6830
214
216
  annofabcli/task_history_event/list_worktime.py,sha256=Y7Pu5DP7scPf7HPt6CTiTvB1_5_Nfi1bStUIaCpkhII,15507
215
217
  annofabcli/task_history_event/subcommand_task_history_event.py,sha256=mJVJoT4RXk4HWnY7-Nrsl4If-gtaIIEXd2z7eFZwM2I,1260
216
- annofabcli-1.107.0.dist-info/METADATA,sha256=naOfvMmFCACfxPn3uScdATo_vyMGHigfNxqlMgUrl6g,5134
217
- annofabcli-1.107.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
218
- annofabcli-1.107.0.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
219
- annofabcli-1.107.0.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
220
- annofabcli-1.107.0.dist-info/RECORD,,
218
+ annofabcli-1.108.0.dist-info/METADATA,sha256=_6wdJATOZ_8Osteclk0AhLdICK7BAy6dVq_C90XA9f8,5134
219
+ annofabcli-1.108.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
220
+ annofabcli-1.108.0.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
221
+ annofabcli-1.108.0.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
222
+ annofabcli-1.108.0.dist-info/RECORD,,
@@ -1,245 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import argparse
4
- import logging
5
- import multiprocessing
6
- import sys
7
- from dataclasses import dataclass
8
- from functools import partial
9
- from pathlib import Path
10
- from typing import Optional
11
-
12
- import annofabapi
13
- import pandas
14
- from dataclasses_json import DataClassJsonMixin
15
-
16
- import annofabcli
17
- import annofabcli.common.cli
18
- from annofabcli.common.cli import (
19
- COMMAND_LINE_ERROR_STATUS_CODE,
20
- PARALLELISM_CHOICES,
21
- ArgumentParser,
22
- CommandLine,
23
- CommandLineWithConfirm,
24
- build_annofabapi_resource_and_login,
25
- get_json_from_args,
26
- )
27
- from annofabcli.common.facade import AnnofabApiFacade
28
-
29
- logger = logging.getLogger(__name__)
30
-
31
-
32
- @dataclass
33
- class ChangedInputData(DataClassJsonMixin):
34
- """
35
- 変更される入力データ
36
- """
37
-
38
- input_data_id: str
39
- """変更対象の入力データを表すID"""
40
- input_data_name: str
41
- """変更後の入力データ名"""
42
-
43
-
44
- class ChangeInputDataNameMain(CommandLineWithConfirm):
45
- def __init__(self, service: annofabapi.Resource, *, all_yes: bool = False) -> None:
46
- self.service = service
47
- CommandLineWithConfirm.__init__(self, all_yes)
48
-
49
- def change_input_data_name(self, project_id: str, input_data_id: str, new_input_data_name: str) -> bool:
50
- """
51
- 1個の入力データの名前を変更します。
52
- """
53
- old_input_data = self.service.wrapper.get_input_data_or_none(project_id, input_data_id)
54
- if old_input_data is None:
55
- logger.warning(f"input_data_id='{input_data_id}'である入力データは存在しません。")
56
- return False
57
-
58
- if not self.confirm_processing(f"input_data_id='{input_data_id}' :: input_data_name='{old_input_data['input_data_name']}'を'{new_input_data_name}'に変更しますか?"):
59
- return False
60
-
61
- request_body = old_input_data
62
- request_body["last_updated_datetime"] = old_input_data["updated_datetime"]
63
- request_body["input_data_name"] = new_input_data_name
64
-
65
- self.service.api.put_input_data(project_id, input_data_id, request_body=request_body)
66
- return True
67
-
68
- def change_input_data_name_list_sequentially(
69
- self,
70
- project_id: str,
71
- changed_input_data_list: list[ChangedInputData],
72
- ) -> None:
73
- """複数の入力データの名前を逐次的に変更します。"""
74
- success_count = 0
75
-
76
- logger.info(f"{len(changed_input_data_list)} 件の入力データの名前を変更します。")
77
-
78
- for input_data_index, changed_input_data in enumerate(changed_input_data_list):
79
- if (input_data_index + 1) % 100 == 0:
80
- logger.info(f"{input_data_index + 1}件目の入力データの名前を変更します。")
81
-
82
- try:
83
- result = self.change_input_data_name(
84
- project_id,
85
- changed_input_data.input_data_id,
86
- new_input_data_name=changed_input_data.input_data_name,
87
- )
88
- if result:
89
- success_count += 1
90
- except Exception:
91
- logger.warning(f"input_data_id='{changed_input_data.input_data_id}'の入力データの名前を変更するのに失敗しました。", exc_info=True)
92
- continue
93
-
94
- logger.info(f"{success_count} / {len(changed_input_data_list)} 件の入力データの名前を変更しました。")
95
-
96
- def _change_input_data_name_wrapper(self, changed_input_data: ChangedInputData, project_id: str) -> bool:
97
- try:
98
- return self.change_input_data_name(
99
- project_id,
100
- input_data_id=changed_input_data.input_data_id,
101
- new_input_data_name=changed_input_data.input_data_name,
102
- )
103
- except Exception:
104
- logger.warning(f"input_data_id='{changed_input_data.input_data_id}'の入力データの名前を変更するのに失敗しました。", exc_info=True)
105
- return False
106
-
107
- def change_input_data_name_list_in_parallel(
108
- self,
109
- project_id: str,
110
- changed_input_data_list: list[ChangedInputData],
111
- parallelism: int,
112
- ) -> None:
113
- """複数の入力データの名前を並列的に変更します。"""
114
-
115
- success_count = 0
116
-
117
- logger.info(f"{len(changed_input_data_list)} 件の入力データの名前を変更します。{parallelism}個のプロセスを使用して並列でに実行します。")
118
-
119
- partial_func = partial(self._change_input_data_name_wrapper, project_id=project_id)
120
- with multiprocessing.Pool(parallelism) as pool:
121
- result_bool_list = pool.map(partial_func, changed_input_data_list)
122
- success_count = len([e for e in result_bool_list if e])
123
-
124
- logger.info(f"{success_count} / {len(changed_input_data_list)} 件の入力データの名前を変更しました。")
125
-
126
-
127
- def create_changed_input_data_list_from_dict(input_data_dict_list: list[dict[str, str]]) -> list[ChangedInputData]:
128
- return [ChangedInputData.from_dict(e) for e in input_data_dict_list]
129
-
130
-
131
- def create_changed_input_data_list_from_csv(csv_file: Path) -> list[ChangedInputData]:
132
- """入力データの情報が記載されているCSVを読み込み、ChangedInputDataのlistを返します。
133
- CSVには以下の列が存在します。
134
- * input_data_id
135
- * input_data_name
136
-
137
- Args:
138
- csv_file (Path): CSVファイルのパス
139
-
140
- Returns:
141
- 変更対象の入力データのlist
142
- """
143
- df_input_data = pandas.read_csv(
144
- csv_file,
145
- # 文字列として読み込むようにする
146
- dtype={"input_data_id": "string", "input_data_name": "string"},
147
- )
148
-
149
- input_data_dict_list = df_input_data.to_dict("records")
150
- return [ChangedInputData.from_dict(e) for e in input_data_dict_list]
151
-
152
-
153
- class ChangeInputDataName(CommandLine):
154
- @staticmethod
155
- def validate(args: argparse.Namespace) -> bool:
156
- COMMON_MESSAGE = "annofabcli input_data change_name: error:" # noqa: N806
157
-
158
- if args.parallelism is not None and not args.yes:
159
- print( # noqa: T201
160
- f"{COMMON_MESSAGE} argument --parallelism: '--parallelism'を指定するときは、必ず ``--yes`` を指定してください。",
161
- file=sys.stderr,
162
- )
163
- return False
164
-
165
- return True
166
-
167
- def main(self) -> None:
168
- args = self.args
169
- if not self.validate(args):
170
- sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
171
-
172
- main_obj = ChangeInputDataNameMain(self.service, all_yes=self.all_yes)
173
-
174
- if args.csv is not None:
175
- changed_input_data_list = create_changed_input_data_list_from_csv(args.csv)
176
-
177
- elif args.json is not None:
178
- input_data_dict_list = get_json_from_args(args.json)
179
- if not isinstance(input_data_dict_list, list):
180
- print("annofabcli input_data change_name: error: JSON形式が不正です。オブジェクトの配列を指定してください。", file=sys.stderr) # noqa: T201
181
- sys.exit(COMMAND_LINE_ERROR_STATUS_CODE)
182
- changed_input_data_list = create_changed_input_data_list_from_dict(input_data_dict_list)
183
- else:
184
- raise RuntimeError("'--csv'または'--json'のいずれかを指定してください。")
185
-
186
- project_id: str = args.project_id
187
- if args.parallelism is not None:
188
- main_obj.change_input_data_name_list_in_parallel(project_id, changed_input_data_list=changed_input_data_list, parallelism=args.parallelism)
189
- else:
190
- main_obj.change_input_data_name_list_sequentially(project_id, changed_input_data_list=changed_input_data_list)
191
-
192
-
193
- def main(args: argparse.Namespace) -> None:
194
- service = build_annofabapi_resource_and_login(args)
195
- facade = AnnofabApiFacade(service)
196
- ChangeInputDataName(service, facade, args).main()
197
-
198
-
199
- def parse_args(parser: argparse.ArgumentParser) -> None:
200
- argument_parser = ArgumentParser(parser)
201
- argument_parser.add_project_id()
202
-
203
- file_group = parser.add_mutually_exclusive_group(required=True)
204
- file_group.add_argument(
205
- "--csv",
206
- type=Path,
207
- help=(
208
- "変更対象の入力データが記載されたCSVファイルのパスを指定してください。\n"
209
- "CSVのフォーマットは以下の通りです。"
210
- "\n"
211
- " * ヘッダ行あり, カンマ区切り\n"
212
- " * input_data_id (required)\n"
213
- " * input_data_name (required)\n"
214
- ),
215
- )
216
-
217
- JSON_SAMPLE = '[{"input_data_id":"id", "input_data_name":"new_name"}]' # noqa: N806
218
- file_group.add_argument(
219
- "--json",
220
- type=str,
221
- help=(
222
- "変更対象の入力データと変更後の名前をJSON形式で指定してください。\n"
223
- "JSONの各キーは ``--csv`` に渡すCSVの各列に対応しています。\n"
224
- "``file://`` を先頭に付けるとjsonファイルを指定できます。\n"
225
- f"(ex) ``{JSON_SAMPLE}``"
226
- ),
227
- )
228
-
229
- parser.add_argument(
230
- "--parallelism",
231
- type=int,
232
- choices=PARALLELISM_CHOICES,
233
- help="使用するプロセス数(並列度)を指定してください。指定する場合は必ず ``--yes`` を指定してください。指定しない場合は、逐次的に処理します。",
234
- )
235
-
236
- parser.set_defaults(subcommand_func=main)
237
-
238
-
239
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
240
- subcommand_name = "change_name"
241
- subcommand_help = "入力データ名を変更します。"
242
- epilog = "オーナロールを持つユーザで実行してください。"
243
- parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, epilog=epilog)
244
- parse_args(parser)
245
- return parser