annofabcli 1.107.1__py3-none-any.whl → 1.109.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
@@ -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
@@ -119,10 +120,13 @@ annofabcli/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
119
120
  annofabcli/project/change_organization_of_project.py,sha256=yeR8Xu4nmvrA4jGfsPDmFxf-qJxvEVQAvluierJRMxc,11300
120
121
  annofabcli/project/change_project_status.py,sha256=AQQFFYjUnwrFshuYS_xSGyLAp2lJ-7SSIuaigPTLBYk,8657
121
122
  annofabcli/project/copy_project.py,sha256=O1TooJ0VVbRP84d4Y-8e6Z7pKMwhBEwPu3EBv15hPlY,7131
123
+ annofabcli/project/create_project.py,sha256=WK1mh6c_2sh-98Q_ZxYIGOZPKe22KnmJS8q_l2gNUdA,6051
122
124
  annofabcli/project/diff_projects.py,sha256=OsR0otV6MOCbUgGEDsYganu5cuHYZbpHbBAqujwBAw8,16531
123
125
  annofabcli/project/list_project.py,sha256=OWnbCyShI4ceugxML8kSAD2nkyld5MlpXfbvQu2__4Y,10367
124
- annofabcli/project/put_project.py,sha256=dsRJfx2ga4mmYci40q91UzXeQN6m_3fMU9mrcFRpY9Q,6033
125
- annofabcli/project/subcommand_project.py,sha256=Tpr-WOw1uCYNYKd-zpSL91j4RqXqjClJrjRVf23X4p4,1333
126
+ annofabcli/project/put_project.py,sha256=b_ZaMhYTgqC-W5q2FpT-BycnPm9QmduHRvG0cVpAK_A,1567
127
+ annofabcli/project/subcommand_project.py,sha256=ZfaBWUP3r7QW1avj_FBI8kyz5CtHt39v1MOii1Ju8TQ,1651
128
+ annofabcli/project/update_configuration.py,sha256=Gnymx6SwnLARY8oSgVLbG9q7y6WRt06i5RQpv6LTcFI,6491
129
+ annofabcli/project/update_project.py,sha256=OqEieEQyIoVjtJxeaaZfeKjrCl7_YXzQBzC8lCVwqN4,12089
126
130
  annofabcli/project_member/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
131
  annofabcli/project_member/change_project_members.py,sha256=T7l7--T2Mb8zLKKfGq3qB-wiAie6rkt2V-iq9e2LDp4,9337
128
132
  annofabcli/project_member/copy_project_members.py,sha256=Rm98Ks0PE4zdoXqpu_itNLvBkh1d5x_J7CKjdTkhKLk,8839
@@ -146,7 +150,7 @@ annofabcli/statistics/list_annotation_attribute.py,sha256=lmvT3b1mVX4PRGWrBUfZaf
146
150
  annofabcli/statistics/list_annotation_attribute_filled_count.py,sha256=UF8wB-kfUnHCIPykb2Z2slyEcp9aHrzcbFbOs_3Z8-A,29341
147
151
  annofabcli/statistics/list_annotation_count.py,sha256=4uTRR63Db-WDGRQt3AC8mPaRfFgbG5d27A036GNG3D0,53151
148
152
  annofabcli/statistics/list_annotation_duration.py,sha256=WxHfzF4tYkveIdkaWoJZ6x7ddBMWkfz1YM_vxMub3jY,32165
149
- annofabcli/statistics/list_video_duration.py,sha256=OCDXPOP2z7flE8NBaQD1lDkU9JG5mn3PfACijoR-5s0,9163
153
+ annofabcli/statistics/list_video_duration.py,sha256=11DvuWgbJoxq7hXN7HRCWFjEAK_VG9C33QTSh7bJb0Y,9195
150
154
  annofabcli/statistics/list_worktime.py,sha256=nr--GtFY-oyFuu8M0EsUqcVxX26gjeP09LYUcdeptyk,6456
151
155
  annofabcli/statistics/scatter.py,sha256=C3hTlm_QfGBiY4KjZ-8D_u_Rk53a9f4jszx4iNZgp9w,10945
152
156
  annofabcli/statistics/subcommand_statistics.py,sha256=Pvd7s0vvDU9tSpAphPrv94IDhhR1p8iFH2tjdt7I7ZU,2536
@@ -189,7 +193,7 @@ annofabcli/task/cancel_acceptance.py,sha256=QG9GhGNfBXntqYTKdYjLUczjD4p_ATkPc_xY
189
193
  annofabcli/task/change_operator.py,sha256=q6pMd1SdsTRgMHS0705dnosTSHprTpYgXtNd0rli2Zg,11793
190
194
  annofabcli/task/change_status_to_break.py,sha256=hwdFTFW-zV0VxuinoBB5n6mvHJ7g9ChjrSOXZcNk88w,8621
191
195
  annofabcli/task/change_status_to_on_hold.py,sha256=vWRyk6IK3HcgTWDIbbhXzsrtuoa7OlXCf8CvUpFp_Uw,12981
192
- annofabcli/task/complete_tasks.py,sha256=ssg_Z7ADRQRXvXgK2k5TEmvbRjrJQ33cXeb8kG8Y3jc,24917
196
+ annofabcli/task/complete_tasks.py,sha256=ouTxqw5_MxLhwCkp_EcBThqA7MhHIZKQsfXxhRJut28,25145
193
197
  annofabcli/task/copy_tasks.py,sha256=EcaCaSzqddlSKSUYqDOD53-r1GFpIl38KL3FriSfMeI,8735
194
198
  annofabcli/task/delete_metadata_key_of_task.py,sha256=Cjqe3fWKeRzVxxlrGyt3TS-x1riD55LnNXLIS9JPoTw,8029
195
199
  annofabcli/task/delete_tasks.py,sha256=7T5eNCMW06ABekNGLwhTitDK5qn0tiPKrEXyJXyQNvs,13098
@@ -213,8 +217,8 @@ annofabcli/task_history_event/download_task_history_event_json.py,sha256=hQLVbQ0
213
217
  annofabcli/task_history_event/list_all_task_history_event.py,sha256=EeKMyPUxGwYCFtWQHHW954ZserGm8lUqrwNnV1iX9X4,6830
214
218
  annofabcli/task_history_event/list_worktime.py,sha256=Y7Pu5DP7scPf7HPt6CTiTvB1_5_Nfi1bStUIaCpkhII,15507
215
219
  annofabcli/task_history_event/subcommand_task_history_event.py,sha256=mJVJoT4RXk4HWnY7-Nrsl4If-gtaIIEXd2z7eFZwM2I,1260
216
- annofabcli-1.107.1.dist-info/METADATA,sha256=90j4DyDKSLm5oMP_wSYKVKhz8OR1pTBvApagXuU6yDc,5134
217
- annofabcli-1.107.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
218
- annofabcli-1.107.1.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
219
- annofabcli-1.107.1.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
220
- annofabcli-1.107.1.dist-info/RECORD,,
220
+ annofabcli-1.109.0.dist-info/METADATA,sha256=pbrL21qmMSLyM9m8jkG-ACFsgHGr9DKBVub588V7jP0,5134
221
+ annofabcli-1.109.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
222
+ annofabcli-1.109.0.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
223
+ annofabcli-1.109.0.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
224
+ annofabcli-1.109.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