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.
@@ -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): # noqa: ANN201
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 put_input_data_main(self, project_id: str, csv_input_data: CsvInputData, *, overwrite: bool = False) -> bool:
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.put_input_data_main, project_id, overwrite=overwrite)
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
 
@@ -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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: annofabcli
3
- Version: 1.106.1
3
+ Version: 1.106.3
4
4
  Summary: Utility Command Line Interface for AnnoFab
5
5
  Author: Kurusugawa Computer Inc.
6
6
  License: MIT
@@ -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=39w-LwhNrT4-20NR5Hy-cn_cUFVVWVnMp9x1d8aITn0,33369
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=VDzU6V8mqa5_-kiwWoircqmDgMZRL6SCiRAN6peDrpc,18037
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=9TN0oykJbTZHSF8p16CHC4Ezay5Ezx6-S_p0-FRUtms,8667
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.1.dist-info/METADATA,sha256=Yn9OyrfluKXXvCiFDNavFc3UnA3wnd6i1gYTRI43V0M,5286
213
- annofabcli-1.106.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
214
- annofabcli-1.106.1.dist-info/entry_points.txt,sha256=C2uSUc-kkLJpoK_mDL5FEMAdorLEMPfwSf8VBMYnIFM,56
215
- annofabcli-1.106.1.dist-info/licenses/LICENSE,sha256=pcqWYfxFtxBzhvKp3x9MXNM4xciGb2eFewaRhXUNHlo,1081
216
- annofabcli-1.106.1.dist-info/RECORD,,
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,,