annofabcli 1.106.1__py3-none-any.whl → 1.106.3__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.
- annofabcli/annotation/import_annotation.py +14 -1
- annofabcli/input_data/put_input_data.py +16 -12
- annofabcli/task/copy_tasks.py +1 -1
- {annofabcli-1.106.1.dist-info → annofabcli-1.106.3.dist-info}/METADATA +1 -1
- {annofabcli-1.106.1.dist-info → annofabcli-1.106.3.dist-info}/RECORD +8 -8
- {annofabcli-1.106.1.dist-info → annofabcli-1.106.3.dist-info}/WHEEL +0 -0
- {annofabcli-1.106.1.dist-info → annofabcli-1.106.3.dist-info}/entry_points.txt +0 -0
- {annofabcli-1.106.1.dist-info → annofabcli-1.106.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -152,13 +152,26 @@ class AnnotationConverter:
|
|
|
152
152
|
|
|
153
153
|
def _convert_attribute_value( # noqa: PLR0911, PLR0912
|
|
154
154
|
self,
|
|
155
|
-
attribute_value: Union[str, int, bool], # noqa: FBT001
|
|
155
|
+
attribute_value: Optional[Union[str, int, bool]], # noqa: FBT001
|
|
156
156
|
additional_data_type: AdditionalDataDefinitionType,
|
|
157
157
|
attribute_name: str,
|
|
158
158
|
choices: list[dict[str, Any]],
|
|
159
159
|
*,
|
|
160
160
|
log_message_suffix: str,
|
|
161
161
|
) -> Optional[dict[str, Any]]:
|
|
162
|
+
"""
|
|
163
|
+
JSONに記載されている属性値を、APIに渡すための `AdditionalDataValue`スキーマに変換します。
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
attribute_value: 属性値。 `None`の場合は、Noneを返します。
|
|
167
|
+
additional_data_type: 属性の型
|
|
168
|
+
attribute_name: 属性名
|
|
169
|
+
choices: 選択肢情報。`AdditionalDataDefinitionType.CHOICE`や`AdditionalDataDefinitionType.SELECT`の場合に利用する。
|
|
170
|
+
log_message_suffix: ログメッセージのサフィックス
|
|
171
|
+
"""
|
|
172
|
+
if attribute_value is None:
|
|
173
|
+
return None
|
|
174
|
+
|
|
162
175
|
if additional_data_type == AdditionalDataDefinitionType.FLAG:
|
|
163
176
|
if not isinstance(attribute_value, bool):
|
|
164
177
|
message = f"属性'{attribute_name}'に対応する属性値の型は bool である必要があります。 :: attribute_value='{attribute_value}', additional_data_type='{additional_data_type}' :: {log_message_suffix}" # noqa: E501
|
|
@@ -129,7 +129,7 @@ class SubPutInputData:
|
|
|
129
129
|
self.facade = facade
|
|
130
130
|
self.all_yes = all_yes
|
|
131
131
|
|
|
132
|
-
def put_input_data(self, project_id: str, csv_input_data: InputDataForPut, last_updated_datetime: Optional[str] = None)
|
|
132
|
+
def put_input_data(self, project_id: str, csv_input_data: InputDataForPut, last_updated_datetime: Optional[str] = None) -> None:
|
|
133
133
|
request_body: dict[str, Any] = {"last_updated_datetime": last_updated_datetime}
|
|
134
134
|
|
|
135
135
|
file_path = get_file_scheme_path(csv_input_data.input_data_path)
|
|
@@ -180,22 +180,26 @@ class SubPutInputData:
|
|
|
180
180
|
|
|
181
181
|
return self.confirm_processing(message_for_confirm)
|
|
182
182
|
|
|
183
|
-
def
|
|
183
|
+
def put_input_data_main_wrapper(self, tpl: tuple[int, CsvInputData], *, project_id: str, overwrite: bool) -> bool:
|
|
184
|
+
input_data_index, csv_input_data = tpl
|
|
185
|
+
return self.put_input_data_main(project_id, csv_input_data, input_data_index=input_data_index, overwrite=overwrite)
|
|
186
|
+
|
|
187
|
+
def put_input_data_main(self, project_id: str, csv_input_data: CsvInputData, *, input_data_index: int, overwrite: bool = False) -> bool:
|
|
184
188
|
input_data = InputDataForPut(
|
|
185
189
|
input_data_name=csv_input_data.input_data_name,
|
|
186
190
|
input_data_path=csv_input_data.input_data_path,
|
|
187
191
|
input_data_id=csv_input_data.input_data_id if csv_input_data.input_data_id is not None else convert_input_data_name_to_input_data_id(csv_input_data.input_data_name),
|
|
188
192
|
)
|
|
189
|
-
|
|
193
|
+
log_message_prefix = f"{input_data_index + 1}件目 :: "
|
|
190
194
|
last_updated_datetime = None
|
|
191
195
|
dict_input_data = self.service.wrapper.get_input_data_or_none(project_id, input_data.input_data_id)
|
|
192
196
|
|
|
193
197
|
if dict_input_data is not None:
|
|
194
198
|
if overwrite:
|
|
195
|
-
logger.debug(f"input_data_id='{input_data.input_data_id}' はすでに存在します。")
|
|
199
|
+
logger.debug(f"{log_message_prefix}input_data_id='{input_data.input_data_id}' はすでに存在します。")
|
|
196
200
|
last_updated_datetime = dict_input_data["updated_datetime"]
|
|
197
201
|
else:
|
|
198
|
-
logger.debug(f"input_data_id='{input_data.input_data_id}' がすでに存在するのでスキップします。")
|
|
202
|
+
logger.debug(f"{log_message_prefix}input_data_id='{input_data.input_data_id}' がすでに存在するのでスキップします。")
|
|
199
203
|
return False
|
|
200
204
|
|
|
201
205
|
file_path = get_file_scheme_path(input_data.input_data_path)
|
|
@@ -210,18 +214,18 @@ class SubPutInputData:
|
|
|
210
214
|
# 入力データを登録
|
|
211
215
|
try:
|
|
212
216
|
self.put_input_data(project_id, input_data, last_updated_datetime=last_updated_datetime)
|
|
213
|
-
logger.debug(f"入力データを登録しました。 :: input_data_id='{input_data.input_data_id}', input_data_name='{input_data.input_data_name}'")
|
|
217
|
+
logger.debug(f"{log_message_prefix}入力データを登録しました。 :: input_data_id='{input_data.input_data_id}', input_data_name='{input_data.input_data_name}'")
|
|
214
218
|
return True # noqa: TRY300
|
|
215
219
|
|
|
216
220
|
except requests.exceptions.HTTPError:
|
|
217
221
|
logger.warning(
|
|
218
|
-
f"入力データの登録に失敗しました。input_data_id='{input_data.input_data_id}', input_data_name='{input_data.input_data_name}'",
|
|
222
|
+
f"{log_message_prefix}入力データの登録に失敗しました。input_data_id='{input_data.input_data_id}', input_data_name='{input_data.input_data_name}'",
|
|
219
223
|
exc_info=True,
|
|
220
224
|
)
|
|
221
225
|
return False
|
|
222
226
|
except CheckSumError:
|
|
223
227
|
logger.warning(
|
|
224
|
-
f"入力データを登録しましたが、データが破損している可能性があります。input_data_id='{input_data.input_data_id}', input_data_name='{input_data.input_data_name}'
|
|
228
|
+
f"{log_message_prefix}入力データを登録しましたが、データが破損している可能性があります。input_data_id='{input_data.input_data_id}', input_data_name='{input_data.input_data_name}'",
|
|
225
229
|
exc_info=True,
|
|
226
230
|
)
|
|
227
231
|
return False
|
|
@@ -259,14 +263,14 @@ class PutInputData(CommandLine):
|
|
|
259
263
|
|
|
260
264
|
obj = SubPutInputData(service=self.service, facade=self.facade, all_yes=self.all_yes)
|
|
261
265
|
if parallelism is not None:
|
|
262
|
-
partial_func = partial(obj.
|
|
266
|
+
partial_func = partial(obj.put_input_data_main_wrapper, project_id=project_id, overwrite=overwrite)
|
|
263
267
|
with Pool(parallelism) as pool:
|
|
264
|
-
result_bool_list = pool.map(partial_func, input_data_list)
|
|
268
|
+
result_bool_list = pool.map(partial_func, enumerate(input_data_list))
|
|
265
269
|
count_put_input_data = len([e for e in result_bool_list if e])
|
|
266
270
|
|
|
267
271
|
else:
|
|
268
|
-
for csv_input_data in input_data_list:
|
|
269
|
-
result = obj.put_input_data_main(project_id, csv_input_data=csv_input_data, overwrite=overwrite)
|
|
272
|
+
for input_data_index, csv_input_data in enumerate(input_data_list):
|
|
273
|
+
result = obj.put_input_data_main(project_id, csv_input_data=csv_input_data, input_data_index=input_data_index, overwrite=overwrite)
|
|
270
274
|
if result:
|
|
271
275
|
count_put_input_data += 1
|
|
272
276
|
|
annofabcli/task/copy_tasks.py
CHANGED
|
@@ -221,7 +221,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
|
|
|
221
221
|
def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
|
|
222
222
|
subcommand_name = "copy"
|
|
223
223
|
subcommand_help = "タスクをコピーします。"
|
|
224
|
-
description = "
|
|
224
|
+
description = "タスクをコピーします。タスクに含まれるアノテーションはコピーされません。"
|
|
225
225
|
epilog = "オーナロールを持つユーザで実行してください。"
|
|
226
226
|
|
|
227
227
|
parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description, epilog=epilog)
|
|
@@ -10,7 +10,7 @@ annofabcli/annotation/copy_annotation.py,sha256=Pih2k3vvpgfT3Ovb3gZw2L_8fK_ws_wK
|
|
|
10
10
|
annofabcli/annotation/delete_annotation.py,sha256=hQApNrx2Ci1bBWk0dRGA0oJkIgDHwl6Jy0-33gYF6jo,22989
|
|
11
11
|
annofabcli/annotation/download_annotation_zip.py,sha256=P_ZpdqIaSFEmB8jjpdykcRhh2tVlHxSlXFrYreJjShE,3282
|
|
12
12
|
annofabcli/annotation/dump_annotation.py,sha256=Q-p6f5XBs7khDgrfY5Q3CGLBMKEerJWO_CQ8_73UXVM,9972
|
|
13
|
-
annofabcli/annotation/import_annotation.py,sha256=
|
|
13
|
+
annofabcli/annotation/import_annotation.py,sha256=xCNnVEd8Ss6aN1XdDsTDf3AuRyB1ocAr0ofbxX1bWSc,33997
|
|
14
14
|
annofabcli/annotation/list_annotation.py,sha256=uKcOuGC7lzd6vVbzizkiZtYdXJ7EzY0iifuiqKl2wQM,10707
|
|
15
15
|
annofabcli/annotation/list_annotation_count.py,sha256=T9fbaoxWeDJIVgW_YgHRldbwrVZWiE-57lfJrDQrj80,6474
|
|
16
16
|
annofabcli/annotation/merge_segmentation.py,sha256=kIsCeXtJxzd6nobQPpi0fscaRDlTx3tg1qpy5PDfSJI,18107
|
|
@@ -82,7 +82,7 @@ annofabcli/input_data/download_input_data_json.py,sha256=vxGoeM3ZEggQbWiWsrDK0_G
|
|
|
82
82
|
annofabcli/input_data/list_all_input_data.py,sha256=C0u2ZmB52NIgn8-S-F6GT6GFS39gLsl5cCNa_oiNKtk,9754
|
|
83
83
|
annofabcli/input_data/list_all_input_data_merged_task.py,sha256=xs1uT9_ToQNA2luLxTOuPO_AUi5WRf1uMCdoBFZIMaU,12655
|
|
84
84
|
annofabcli/input_data/list_input_data.py,sha256=Jz5tRDPBLE8CyPV85jmOGd2-aHELyAE4MGi7WVjZaDM,11335
|
|
85
|
-
annofabcli/input_data/put_input_data.py,sha256=
|
|
85
|
+
annofabcli/input_data/put_input_data.py,sha256=3rr5sWGZvlureGyZ4Fga3cfKQOwirLa_cnE7yhybZk0,18600
|
|
86
86
|
annofabcli/input_data/put_input_data_with_zip.py,sha256=SA4aMAwMBFgc9Lh0zmRCbmkXG4AMrcBqd5zeTSdr8lc,5566
|
|
87
87
|
annofabcli/input_data/subcommand_input_data.py,sha256=X8EoxsF6PMiKrvk_r7PIe2D0WZuaPlgLJRuTiljPIdM,2048
|
|
88
88
|
annofabcli/input_data/update_metadata_of_input_data.py,sha256=E4E-FZaQBmhmhMhddehhtVLxS26TsehZzHRI6Ccr8pc,11460
|
|
@@ -186,7 +186,7 @@ annofabcli/task/change_operator.py,sha256=1LLpez79ezW_MqcNN608kjxp3xTS1uRRioqcug
|
|
|
186
186
|
annofabcli/task/change_status_to_break.py,sha256=hwdFTFW-zV0VxuinoBB5n6mvHJ7g9ChjrSOXZcNk88w,8621
|
|
187
187
|
annofabcli/task/change_status_to_on_hold.py,sha256=vWRyk6IK3HcgTWDIbbhXzsrtuoa7OlXCf8CvUpFp_Uw,12981
|
|
188
188
|
annofabcli/task/complete_tasks.py,sha256=ssg_Z7ADRQRXvXgK2k5TEmvbRjrJQ33cXeb8kG8Y3jc,24917
|
|
189
|
-
annofabcli/task/copy_tasks.py,sha256=
|
|
189
|
+
annofabcli/task/copy_tasks.py,sha256=66C1NQq46d6HenLpQCnkTjiXedL4iVtCu6qUimosVyU,8742
|
|
190
190
|
annofabcli/task/delete_metadata_key_of_task.py,sha256=Cjqe3fWKeRzVxxlrGyt3TS-x1riD55LnNXLIS9JPoTw,8029
|
|
191
191
|
annofabcli/task/delete_tasks.py,sha256=7T5eNCMW06ABekNGLwhTitDK5qn0tiPKrEXyJXyQNvs,13098
|
|
192
192
|
annofabcli/task/download_task_json.py,sha256=Ocjecmdf2WV_Sq3u1InfMLIsT3XSw0ojyJmJbhv2sgg,2803
|
|
@@ -209,8 +209,8 @@ annofabcli/task_history_event/download_task_history_event_json.py,sha256=hQLVbQ0
|
|
|
209
209
|
annofabcli/task_history_event/list_all_task_history_event.py,sha256=EeKMyPUxGwYCFtWQHHW954ZserGm8lUqrwNnV1iX9X4,6830
|
|
210
210
|
annofabcli/task_history_event/list_worktime.py,sha256=Y7Pu5DP7scPf7HPt6CTiTvB1_5_Nfi1bStUIaCpkhII,15507
|
|
211
211
|
annofabcli/task_history_event/subcommand_task_history_event.py,sha256=mJVJoT4RXk4HWnY7-Nrsl4If-gtaIIEXd2z7eFZwM2I,1260
|
|
212
|
-
annofabcli-1.106.
|
|
213
|
-
annofabcli-1.106.
|
|
214
|
-
annofabcli-1.106.
|
|
215
|
-
annofabcli-1.106.
|
|
216
|
-
annofabcli-1.106.
|
|
212
|
+
annofabcli-1.106.3.dist-info/METADATA,sha256=LbAdYDBRhLmbDAO51FlNar220liORAfuTYJiTYyZGRQ,5286
|
|
213
|
+
annofabcli-1.106.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
214
|
+
annofabcli-1.106.3.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
|
|
215
|
+
annofabcli-1.106.3.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
|
|
216
|
+
annofabcli-1.106.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|