annofabcli 1.111.2__py3-none-any.whl → 1.113.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.
Files changed (186) hide show
  1. annofabcli/__main__.py +1 -2
  2. annofabcli/annotation/annotation_query.py +10 -10
  3. annofabcli/annotation/change_annotation_attributes.py +10 -10
  4. annofabcli/annotation/change_annotation_attributes_per_annotation.py +4 -5
  5. annofabcli/annotation/change_annotation_properties.py +14 -14
  6. annofabcli/annotation/copy_annotation.py +6 -6
  7. annofabcli/annotation/create_classification_annotation.py +7 -7
  8. annofabcli/annotation/delete_annotation.py +9 -9
  9. annofabcli/annotation/download_annotation_zip.py +1 -3
  10. annofabcli/annotation/dump_annotation.py +8 -8
  11. annofabcli/annotation/import_annotation.py +13 -13
  12. annofabcli/annotation/list_annotation.py +9 -9
  13. annofabcli/annotation/list_annotation_count.py +2 -3
  14. annofabcli/annotation/merge_segmentation.py +6 -6
  15. annofabcli/annotation/remove_segmentation_overlap.py +5 -5
  16. annofabcli/annotation/restore_annotation.py +7 -7
  17. annofabcli/annotation/subcommand_annotation.py +1 -2
  18. annofabcli/annotation_specs/add_attribute_restriction.py +4 -5
  19. annofabcli/annotation_specs/attribute_restriction.py +8 -8
  20. annofabcli/annotation_specs/export_annotation_specs.py +4 -5
  21. annofabcli/annotation_specs/get_annotation_specs_with_attribute_id_replaced.py +3 -4
  22. annofabcli/annotation_specs/get_annotation_specs_with_choice_id_replaced.py +3 -4
  23. annofabcli/annotation_specs/get_annotation_specs_with_label_id_replaced.py +3 -4
  24. annofabcli/annotation_specs/list_annotation_specs_attribute.py +9 -10
  25. annofabcli/annotation_specs/list_annotation_specs_choice.py +9 -10
  26. annofabcli/annotation_specs/list_annotation_specs_history.py +3 -3
  27. annofabcli/annotation_specs/list_annotation_specs_label.py +8 -9
  28. annofabcli/annotation_specs/list_annotation_specs_label_attribute.py +10 -11
  29. annofabcli/annotation_specs/list_attribute_restriction.py +2 -4
  30. annofabcli/annotation_specs/list_label_color.py +2 -3
  31. annofabcli/annotation_specs/put_label_color.py +3 -4
  32. annofabcli/annotation_specs/subcommand_annotation_specs.py +1 -3
  33. annofabcli/annotation_zip/list_annotation_3d_bounding_box.py +365 -0
  34. annofabcli/annotation_zip/list_annotation_bounding_box_2d.py +37 -38
  35. annofabcli/annotation_zip/list_polygon_annotation.py +390 -0
  36. annofabcli/annotation_zip/list_polyline_annotation.py +402 -0
  37. annofabcli/annotation_zip/list_range_annotation.py +25 -15
  38. annofabcli/annotation_zip/list_single_point_annotation.py +25 -34
  39. annofabcli/annotation_zip/subcommand_annotation_zip.py +7 -2
  40. annofabcli/annotation_zip/validate_annotation.py +8 -7
  41. annofabcli/comment/delete_comment.py +4 -6
  42. annofabcli/comment/download_comment_json.py +4 -6
  43. annofabcli/comment/list_all_comment.py +5 -6
  44. annofabcli/comment/list_comment.py +3 -4
  45. annofabcli/comment/put_comment.py +9 -10
  46. annofabcli/comment/put_comment_simply.py +5 -6
  47. annofabcli/comment/put_inspection_comment.py +1 -3
  48. annofabcli/comment/put_inspection_comment_simply.py +1 -3
  49. annofabcli/comment/put_onhold_comment.py +1 -3
  50. annofabcli/comment/put_onhold_comment_simply.py +1 -3
  51. annofabcli/comment/subcommand_comment.py +1 -3
  52. annofabcli/common/bokeh.py +4 -4
  53. annofabcli/common/cli.py +18 -17
  54. annofabcli/common/download.py +28 -29
  55. annofabcli/common/facade.py +37 -38
  56. annofabcli/common/image.py +14 -14
  57. annofabcli/common/utils.py +8 -8
  58. annofabcli/common/visualize.py +13 -13
  59. annofabcli/experimental/list_out_of_range_annotation_for_movie.py +3 -4
  60. annofabcli/experimental/subcommand_experimental.py +1 -3
  61. annofabcli/filesystem/draw_annotation.py +27 -27
  62. annofabcli/filesystem/filter_annotation.py +9 -10
  63. annofabcli/filesystem/mask_user_info.py +15 -15
  64. annofabcli/filesystem/merge_annotation.py +9 -9
  65. annofabcli/filesystem/subcommand_filesystem.py +1 -3
  66. annofabcli/input_data/copy_input_data.py +8 -9
  67. annofabcli/input_data/delete_input_data.py +3 -3
  68. annofabcli/input_data/delete_metadata_key_of_input_data.py +3 -5
  69. annofabcli/input_data/download_input_data_json.py +4 -6
  70. annofabcli/input_data/list_all_input_data.py +9 -9
  71. annofabcli/input_data/list_all_input_data_merged_task.py +5 -5
  72. annofabcli/input_data/list_input_data.py +5 -5
  73. annofabcli/input_data/put_input_data.py +6 -6
  74. annofabcli/input_data/put_input_data_with_zip.py +3 -4
  75. annofabcli/input_data/subcommand_input_data.py +1 -3
  76. annofabcli/input_data/update_input_data.py +6 -8
  77. annofabcli/input_data/update_metadata_of_input_data.py +3 -5
  78. annofabcli/instruction/copy_instruction.py +5 -6
  79. annofabcli/instruction/download_instruction.py +5 -6
  80. annofabcli/instruction/list_instruction_history.py +3 -3
  81. annofabcli/instruction/subcommand_instruction.py +1 -3
  82. annofabcli/instruction/upload_instruction.py +3 -4
  83. annofabcli/job/delete_job.py +2 -3
  84. annofabcli/job/list_job.py +5 -5
  85. annofabcli/job/list_last_job.py +4 -4
  86. annofabcli/job/subcommand_job.py +1 -3
  87. annofabcli/job/wait_job.py +4 -5
  88. annofabcli/my_account/get_my_account.py +2 -3
  89. annofabcli/my_account/subcommand_my_account.py +1 -3
  90. annofabcli/organization/list_organization.py +2 -3
  91. annofabcli/organization/subcommand_organization.py +1 -3
  92. annofabcli/organization_member/change_organization_member.py +3 -4
  93. annofabcli/organization_member/delete_organization_member.py +3 -4
  94. annofabcli/organization_member/invite_organization_member.py +1 -3
  95. annofabcli/organization_member/list_organization_member.py +3 -3
  96. annofabcli/organization_member/subcommand_organization_member.py +1 -3
  97. annofabcli/project/change_organization_of_project.py +4 -4
  98. annofabcli/project/change_project_status.py +4 -4
  99. annofabcli/project/copy_project.py +5 -5
  100. annofabcli/project/create_project.py +8 -8
  101. annofabcli/project/diff_projects.py +4 -5
  102. annofabcli/project/list_project.py +5 -5
  103. annofabcli/project/put_project.py +2 -3
  104. annofabcli/project/subcommand_project.py +1 -2
  105. annofabcli/project/update_configuration.py +4 -4
  106. annofabcli/project/update_project.py +6 -8
  107. annofabcli/project_member/change_project_members.py +8 -8
  108. annofabcli/project_member/copy_project_members.py +4 -4
  109. annofabcli/project_member/drop_project_members.py +2 -3
  110. annofabcli/project_member/invite_project_members.py +1 -3
  111. annofabcli/project_member/list_users.py +2 -3
  112. annofabcli/project_member/put_project_members.py +6 -6
  113. annofabcli/project_member/subcommand_project_member.py +1 -3
  114. annofabcli/stat_visualization/mask_visualization_dir.py +8 -9
  115. annofabcli/stat_visualization/merge_visualization_dir.py +6 -7
  116. annofabcli/stat_visualization/subcommand_stat_visualization.py +1 -2
  117. annofabcli/stat_visualization/summarize_whole_performance_csv.py +1 -2
  118. annofabcli/stat_visualization/write_graph.py +2 -3
  119. annofabcli/stat_visualization/write_performance_rating_csv.py +20 -27
  120. annofabcli/statistics/histogram.py +5 -6
  121. annofabcli/statistics/linegraph.py +13 -14
  122. annofabcli/statistics/list_annotation_area.py +38 -13
  123. annofabcli/statistics/list_annotation_attribute.py +9 -10
  124. annofabcli/statistics/list_annotation_attribute_filled_count.py +30 -31
  125. annofabcli/statistics/list_annotation_count.py +57 -58
  126. annofabcli/statistics/list_annotation_duration.py +33 -34
  127. annofabcli/statistics/list_video_duration.py +4 -5
  128. annofabcli/statistics/list_worktime.py +4 -4
  129. annofabcli/statistics/scatter.py +9 -8
  130. annofabcli/statistics/subcommand_statistics.py +1 -4
  131. annofabcli/statistics/summarize_task_count.py +4 -6
  132. annofabcli/statistics/summarize_task_count_by_task_id_group.py +2 -4
  133. annofabcli/statistics/summarize_task_count_by_user.py +1 -3
  134. annofabcli/statistics/visualization/dataframe/annotation_count.py +5 -4
  135. annofabcli/statistics/visualization/dataframe/annotation_duration.py +2 -3
  136. annofabcli/statistics/visualization/dataframe/cumulative_productivity.py +15 -17
  137. annofabcli/statistics/visualization/dataframe/productivity_per_date.py +17 -19
  138. annofabcli/statistics/visualization/dataframe/project_performance.py +3 -12
  139. annofabcli/statistics/visualization/dataframe/task.py +11 -12
  140. annofabcli/statistics/visualization/dataframe/task_worktime_by_phase_user.py +9 -10
  141. annofabcli/statistics/visualization/dataframe/user_performance.py +21 -19
  142. annofabcli/statistics/visualization/dataframe/whole_performance.py +3 -4
  143. annofabcli/statistics/visualization/dataframe/whole_productivity_per_date.py +12 -14
  144. annofabcli/statistics/visualization/dataframe/worktime_per_date.py +11 -13
  145. annofabcli/statistics/visualization/filtering_query.py +7 -7
  146. annofabcli/statistics/visualization/project_dir.py +27 -14
  147. annofabcli/statistics/visualize_annotation_count.py +22 -23
  148. annofabcli/statistics/visualize_annotation_duration.py +21 -22
  149. annofabcli/statistics/visualize_statistics.py +36 -33
  150. annofabcli/statistics/visualize_video_duration.py +18 -20
  151. annofabcli/supplementary/delete_supplementary_data.py +5 -5
  152. annofabcli/supplementary/list_supplementary_data.py +4 -4
  153. annofabcli/supplementary/put_supplementary_data.py +9 -9
  154. annofabcli/supplementary/subcommand_supplementary.py +1 -3
  155. annofabcli/task/cancel_acceptance.py +16 -17
  156. annofabcli/task/change_operator.py +10 -12
  157. annofabcli/task/change_status_to_break.py +7 -9
  158. annofabcli/task/change_status_to_on_hold.py +10 -12
  159. annofabcli/task/complete_tasks.py +17 -18
  160. annofabcli/task/copy_tasks.py +3 -5
  161. annofabcli/task/delete_metadata_key_of_task.py +4 -6
  162. annofabcli/task/delete_tasks.py +7 -7
  163. annofabcli/task/download_task_json.py +4 -6
  164. annofabcli/task/list_all_tasks.py +8 -8
  165. annofabcli/task/list_all_tasks_added_task_history.py +14 -13
  166. annofabcli/task/list_tasks.py +7 -7
  167. annofabcli/task/list_tasks_added_task_history.py +10 -10
  168. annofabcli/task/put_tasks.py +5 -6
  169. annofabcli/task/put_tasks_by_count.py +2 -3
  170. annofabcli/task/reject_tasks.py +18 -20
  171. annofabcli/task/subcommand_task.py +1 -3
  172. annofabcli/task/update_metadata_of_task.py +5 -6
  173. annofabcli/task_history/download_task_history_json.py +4 -6
  174. annofabcli/task_history/list_all_task_history.py +6 -7
  175. annofabcli/task_history/list_task_history.py +4 -5
  176. annofabcli/task_history/subcommand_task_history.py +1 -3
  177. annofabcli/task_history_event/download_task_history_event_json.py +4 -6
  178. annofabcli/task_history_event/list_all_task_history_event.py +7 -7
  179. annofabcli/task_history_event/list_worktime.py +17 -16
  180. annofabcli/task_history_event/subcommand_task_history_event.py +1 -2
  181. {annofabcli-1.111.2.dist-info → annofabcli-1.113.0.dist-info}/METADATA +9 -15
  182. annofabcli-1.113.0.dist-info/RECORD +231 -0
  183. {annofabcli-1.111.2.dist-info → annofabcli-1.113.0.dist-info}/WHEEL +1 -1
  184. annofabcli-1.111.2.dist-info/RECORD +0 -228
  185. {annofabcli-1.111.2.dist-info → annofabcli-1.113.0.dist-info}/entry_points.txt +0 -0
  186. {annofabcli-1.111.2.dist-info → annofabcli-1.113.0.dist-info}/licenses/LICENSE +0 -0
@@ -7,12 +7,12 @@ import logging
7
7
  import sys
8
8
  from collections import defaultdict
9
9
  from pathlib import Path
10
- from typing import Any, Optional
10
+ from typing import Any
11
11
 
12
12
  import pandas
13
13
  from annofabapi.dataclass.input import InputData
14
14
 
15
- import annofabcli
15
+ import annofabcli.common.cli
16
16
  from annofabcli.common.cli import (
17
17
  COMMAND_LINE_ERROR_STATUS_CODE,
18
18
  ArgumentParser,
@@ -105,8 +105,8 @@ def create_df_input_data_with_merged_task(input_data_list: list[dict[str, Any]])
105
105
 
106
106
  def match_input_data(
107
107
  input_data: dict[str, Any],
108
- input_data_id_set: Optional[set[str]] = None,
109
- input_data_query: Optional[InputDataQuery] = None,
108
+ input_data_id_set: set[str] | None = None,
109
+ input_data_query: InputDataQuery | None = None,
110
110
  ) -> bool:
111
111
  result = True
112
112
 
@@ -273,7 +273,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
273
273
  parser.set_defaults(subcommand_func=main)
274
274
 
275
275
 
276
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
276
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
277
277
  subcommand_name = "list_all_merged_task"
278
278
  subcommand_help = "タスク一覧と結合したすべての入力データ一覧の情報を出力します。"
279
279
 
@@ -1,13 +1,13 @@
1
1
  import argparse
2
2
  import logging
3
3
  import urllib.parse
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  import annofabapi
7
7
  import pandas
8
8
  from annofabapi.models import InputData
9
9
 
10
- import annofabcli
10
+ import annofabcli.common.cli
11
11
  from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login, print_according_to_format, print_csv
12
12
  from annofabcli.common.enums import FormatArgument
13
13
  from annofabcli.common.facade import AnnofabApiFacade
@@ -122,8 +122,8 @@ class ListInputDataMain:
122
122
  def get_input_data_list(
123
123
  self,
124
124
  *,
125
- input_data_id_list: Optional[list[str]] = None,
126
- input_data_query: Optional[dict[str, Any]] = None,
125
+ input_data_id_list: list[str] | None = None,
126
+ input_data_query: dict[str, Any] | None = None,
127
127
  contain_parent_task_id_list: bool = False,
128
128
  contain_supplementary_data_count: bool = False,
129
129
  ) -> list[InputData]:
@@ -235,7 +235,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
235
235
  parser.set_defaults(subcommand_func=main)
236
236
 
237
237
 
238
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
238
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
239
239
  subcommand_name = "list"
240
240
  subcommand_help = "入力データ一覧を出力します。"
241
241
  description = "入力データ一覧を出力します。Annofabの制約上、10,000件までしか出力されません。"
@@ -6,7 +6,7 @@ from dataclasses import dataclass
6
6
  from functools import partial
7
7
  from multiprocessing import Pool
8
8
  from pathlib import Path
9
- from typing import Any, Optional
9
+ from typing import Any
10
10
 
11
11
  import annofabapi
12
12
  import pandas
@@ -15,7 +15,7 @@ from annofabapi.exceptions import CheckSumError
15
15
  from annofabapi.models import ProjectMemberRole
16
16
  from dataclasses_json import DataClassJsonMixin
17
17
 
18
- import annofabcli
18
+ import annofabcli.common.cli
19
19
  from annofabcli.common.cli import (
20
20
  COMMAND_LINE_ERROR_STATUS_CODE,
21
21
  PARALLELISM_CHOICES,
@@ -39,7 +39,7 @@ class CsvInputData(DataClassJsonMixin):
39
39
 
40
40
  input_data_name: str
41
41
  input_data_path: str
42
- input_data_id: Optional[str] = None
42
+ input_data_id: str | None = None
43
43
 
44
44
 
45
45
  @dataclass
@@ -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) -> None:
132
+ def put_input_data(self, project_id: str, csv_input_data: InputDataForPut, last_updated_datetime: str | None = 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)
@@ -246,7 +246,7 @@ class PutInputData(CommandLine):
246
246
  project_id: str,
247
247
  input_data_list: list[CsvInputData],
248
248
  overwrite: bool = False, # noqa: FBT001, FBT002
249
- parallelism: Optional[int] = None,
249
+ parallelism: int | None = None,
250
250
  ) -> None:
251
251
  """
252
252
  入力データを一括で登録する。
@@ -423,7 +423,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
423
423
  parser.set_defaults(subcommand_func=main)
424
424
 
425
425
 
426
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
426
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
427
427
  subcommand_name = "put"
428
428
  subcommand_help = "入力データを登録します。"
429
429
  epilog = "オーナロールを持つユーザで実行してください。"
@@ -4,11 +4,10 @@ import sys
4
4
  import uuid
5
5
  import zipfile
6
6
  from pathlib import Path
7
- from typing import Optional
8
7
 
9
8
  from annofabapi.models import ProjectJobType, ProjectMemberRole
10
9
 
11
- import annofabcli
10
+ import annofabcli.common.cli
12
11
  from annofabcli.common.cli import (
13
12
  COMMAND_LINE_ERROR_STATUS_CODE,
14
13
  ArgumentParser,
@@ -35,7 +34,7 @@ class PutInputData(CommandLine):
35
34
  project_id: str,
36
35
  zip_file: Path,
37
36
  wait_options: WaitOptions,
38
- input_data_name_prefix: Optional[str] = None,
37
+ input_data_name_prefix: str | None = None,
39
38
  wait: bool = False, # noqa: FBT001, FBT002
40
39
  ) -> None:
41
40
  """
@@ -137,7 +136,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
137
136
  parser.set_defaults(subcommand_func=main)
138
137
 
139
138
 
140
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
139
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
141
140
  subcommand_name = "put_with_zip"
142
141
  subcommand_help = "zipファイルを入力データとして登録します。"
143
142
  description = "zipファイルを入力データとして登録します。"
@@ -1,7 +1,5 @@
1
1
  import argparse
2
- from typing import Optional
3
2
 
4
- import annofabcli
5
3
  import annofabcli.common.cli
6
4
  import annofabcli.input_data.copy_input_data
7
5
  import annofabcli.input_data.delete_input_data
@@ -33,7 +31,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
33
31
  annofabcli.input_data.update_metadata_of_input_data.add_parser(subparsers)
34
32
 
35
33
 
36
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
34
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
37
35
  subcommand_name = "input_data"
38
36
  subcommand_help = "入力データ関係のサブコマンド"
39
37
  description = "入力データ関係のサブコマンド"
@@ -9,13 +9,11 @@ from dataclasses import dataclass
9
9
  from enum import Enum
10
10
  from functools import partial
11
11
  from pathlib import Path
12
- from typing import Optional
13
12
 
14
13
  import annofabapi
15
14
  import pandas
16
15
  from dataclasses_json import DataClassJsonMixin
17
16
 
18
- import annofabcli
19
17
  import annofabcli.common.cli
20
18
  from annofabcli.common.cli import (
21
19
  COMMAND_LINE_ERROR_STATUS_CODE,
@@ -50,9 +48,9 @@ class UpdatedInputData(DataClassJsonMixin):
50
48
 
51
49
  input_data_id: str
52
50
  """更新対象の入力データを表すID"""
53
- input_data_name: Optional[str] = None
51
+ input_data_name: str | None = None
54
52
  """変更後の入力データ名(指定した場合のみ更新)"""
55
- input_data_path: Optional[str] = None
53
+ input_data_path: str | None = None
56
54
  """変更後の入力データパス(指定した場合のみ更新)"""
57
55
 
58
56
 
@@ -66,9 +64,9 @@ class UpdateInputDataMain(CommandLineWithConfirm):
66
64
  project_id: str,
67
65
  input_data_id: str,
68
66
  *,
69
- new_input_data_name: Optional[str] = None,
70
- new_input_data_path: Optional[str] = None,
71
- input_data_index: Optional[int] = None,
67
+ new_input_data_name: str | None = None,
68
+ new_input_data_path: str | None = None,
69
+ input_data_index: int | None = None,
72
70
  ) -> UpdateResult:
73
71
  """
74
72
  1個の入力データを更新します。
@@ -299,7 +297,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
299
297
  parser.set_defaults(subcommand_func=main)
300
298
 
301
299
 
302
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
300
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
303
301
  subcommand_name = "update"
304
302
  subcommand_help = "入力データの名前または入力データのパスを更新します。"
305
303
  epilog = "オーナロールを持つユーザで実行してください。"
@@ -8,12 +8,10 @@ import multiprocessing
8
8
  import sys
9
9
  from dataclasses import dataclass
10
10
  from functools import partial
11
- from typing import Optional
12
11
 
13
12
  import annofabapi
14
13
  from annofabapi.models import ProjectMemberRole
15
14
 
16
- import annofabcli
17
15
  import annofabcli.common.cli
18
16
  from annofabcli.common.cli import (
19
17
  COMMAND_LINE_ERROR_STATUS_CODE,
@@ -52,7 +50,7 @@ class UpdateMetadataMain(CommandLineWithConfirm):
52
50
  metadata: Metadata,
53
51
  *,
54
52
  overwrite_metadata: bool = False,
55
- input_data_index: Optional[int] = None,
53
+ input_data_index: int | None = None,
56
54
  ) -> bool:
57
55
  def get_confirm_message() -> str:
58
56
  if overwrite_metadata:
@@ -97,7 +95,7 @@ class UpdateMetadataMain(CommandLineWithConfirm):
97
95
  metadata_by_input_data_id: dict[str, Metadata],
98
96
  *,
99
97
  overwrite_metadata: bool = False,
100
- parallelism: Optional[int] = None,
98
+ parallelism: int | None = None,
101
99
  ) -> None:
102
100
  metadata_info_list = [InputDataMetadataInfo(input_data_id, metadata) for input_data_id, metadata in metadata_by_input_data_id.items()]
103
101
  if overwrite_metadata:
@@ -256,7 +254,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
256
254
  parser.set_defaults(subcommand_func=main)
257
255
 
258
256
 
259
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
257
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
260
258
  subcommand_name = "update_metadata"
261
259
  subcommand_help = "入力データのメタデータを更新します。"
262
260
  description = "入力データのメタデータを更新します。"
@@ -1,13 +1,12 @@
1
1
  import argparse
2
2
  import logging
3
3
  import mimetypes
4
- from typing import Optional
5
4
 
6
5
  import requests
7
6
  from annofabapi.models import ProjectMemberRole
8
7
  from pyquery import PyQuery
9
8
 
10
- import annofabcli
9
+ import annofabcli.common.cli
11
10
  from annofabcli.common.cli import CommandLine, build_annofabapi_resource_and_login
12
11
  from annofabcli.common.facade import AnnofabApiFacade
13
12
 
@@ -36,7 +35,7 @@ class CopyInstruction(CommandLine):
36
35
  return url_without_query.split("/")[-1]
37
36
 
38
37
  @staticmethod
39
- def _get_mime_type_from_filename(filename: Optional[str]) -> str:
38
+ def _get_mime_type_from_filename(filename: str | None) -> str:
40
39
  """
41
40
  ファイル名からMIME TYPEを取得する。
42
41
  """
@@ -47,7 +46,7 @@ class CopyInstruction(CommandLine):
47
46
  content_type = mimetypes.guess_type(filename)[0]
48
47
  return content_type if content_type is not None else DEFAULT_MIME_TYPE
49
48
 
50
- def upload_instruction_image(self, src_project_id: str, dest_project_id: str, pq_img: PyQuery) -> Optional[str]:
49
+ def upload_instruction_image(self, src_project_id: str, dest_project_id: str, pq_img: PyQuery) -> str | None:
51
50
  """
52
51
  コピー元の作業ガイド画像を、コピー先にアップロードする。
53
52
  Args:
@@ -60,7 +59,7 @@ class CopyInstruction(CommandLine):
60
59
 
61
60
  """
62
61
 
63
- src_instruction_image_url: Optional[str] = pq_img.attr["src"]
62
+ src_instruction_image_url: str | None = pq_img.attr["src"]
64
63
  if src_instruction_image_url is None:
65
64
  logger.warning(f"{pq_img=} にsrc属性がないのでスキップします。")
66
65
  return None
@@ -148,7 +147,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
148
147
  parser.set_defaults(subcommand_func=main)
149
148
 
150
149
 
151
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
150
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
152
151
  subcommand_name = "copy"
153
152
  subcommand_help = "作業ガイドをコピーします。"
154
153
  description = "作業ガイドを別プロジェクトにコピーします。"
@@ -2,12 +2,11 @@ import argparse
2
2
  import logging.handlers
3
3
  import sys
4
4
  from pathlib import Path
5
- from typing import Optional
6
5
 
7
6
  import annofabapi
8
7
  import pyquery
9
8
 
10
- import annofabcli
9
+ import annofabcli.common.cli
11
10
  from annofabcli.common.cli import (
12
11
  COMMAND_LINE_ERROR_STATUS_CODE,
13
12
  ArgumentParser,
@@ -62,7 +61,7 @@ class DownloadInstructionMain:
62
61
  img_dir = output_dir / "img"
63
62
  img_dir.mkdir(exist_ok=True, parents=True)
64
63
  for img_elm in pq_img:
65
- src_value: Optional[str] = img_elm.attrib.get("src")
64
+ src_value: str | None = img_elm.attrib.get("src")
66
65
  if src_value is None:
67
66
  continue
68
67
 
@@ -81,7 +80,7 @@ class DownloadInstructionMain:
81
80
 
82
81
  return pq.outer_html()
83
82
 
84
- def download_instruction(self, project_id: str, output_dir: Path, history_id: Optional[str] = None, is_download_image: bool = False): # noqa: ANN201, FBT001, FBT002
83
+ def download_instruction(self, project_id: str, output_dir: Path, history_id: str | None = None, is_download_image: bool = False): # noqa: ANN201, FBT001, FBT002
85
84
  """
86
85
  作業ガイドをダウンロードする
87
86
 
@@ -115,7 +114,7 @@ class DownloadInstructionMain:
115
114
  class DownloadInstruction(CommandLine):
116
115
  COMMON_MESSAGE = "annofabcli instruction download"
117
116
 
118
- def get_history_id_from_before_index(self, project_id: str, before: int) -> Optional[str]:
117
+ def get_history_id_from_before_index(self, project_id: str, before: int) -> str | None:
119
118
  histories, _ = self.service.api.get_instruction_history(project_id, query_params={"limit": 10000})
120
119
  if before + 1 > len(histories):
121
120
  logger.warning(f"作業ガイドの変更履歴は{len(histories)}個のため、最新より{before}個前の作業ガイドは見つかりませんでした。")
@@ -190,7 +189,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
190
189
  parser.set_defaults(subcommand_func=main)
191
190
 
192
191
 
193
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
192
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
194
193
  subcommand_name = "download"
195
194
  subcommand_help = "作業ガイドをダウンロードします。"
196
195
  description = "作業ガイドをダウンロードします。HTMLファイルにはbodyタグの内部が記載されています。"
@@ -1,8 +1,8 @@
1
1
  import argparse
2
2
  import logging
3
- from typing import Any, Optional
3
+ from typing import Any
4
4
 
5
- import annofabcli
5
+ import annofabcli.common.cli
6
6
  from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login
7
7
  from annofabcli.common.enums import FormatArgument
8
8
  from annofabcli.common.facade import AnnofabApiFacade
@@ -45,7 +45,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
45
45
  parser.set_defaults(subcommand_func=main)
46
46
 
47
47
 
48
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
48
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
49
49
  subcommand_name = "list_history"
50
50
  subcommand_help = "作業ガイドの変更履歴を出力します。"
51
51
  description = "作業ガイドの変更履歴を出力します。"
@@ -1,7 +1,5 @@
1
1
  import argparse
2
- from typing import Optional
3
2
 
4
- import annofabcli
5
3
  import annofabcli.common.cli
6
4
  import annofabcli.instruction.copy_instruction
7
5
  import annofabcli.instruction.download_instruction
@@ -19,7 +17,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
19
17
  annofabcli.instruction.upload_instruction.add_parser(subparsers)
20
18
 
21
19
 
22
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
20
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
23
21
  subcommand_name = "instruction"
24
22
  subcommand_help = "作業ガイド関係のサブコマンド"
25
23
  description = "作業ガイド関係のサブコマンド"
@@ -7,13 +7,12 @@ import logging.handlers
7
7
  import tempfile
8
8
  import uuid
9
9
  from pathlib import Path
10
- from typing import Optional
11
10
 
12
11
  import pyquery
13
12
  from datauri import DataURI
14
13
  from PIL import Image
15
14
 
16
- import annofabcli
15
+ import annofabcli.common.cli
17
16
  from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login
18
17
  from annofabcli.common.facade import AnnofabApiFacade
19
18
 
@@ -60,7 +59,7 @@ class UploadInstruction(CommandLine):
60
59
  img_path_dict: dict[str, str] = {}
61
60
  # 画像をすべてアップロードして、img要素のsrc属性値を annofab urlに変更する
62
61
  for img_elm in pq_img:
63
- src_value: Optional[str] = img_elm.attrib.get("src")
62
+ src_value: str | None = img_elm.attrib.get("src")
64
63
  if src_value is None:
65
64
  continue
66
65
 
@@ -144,7 +143,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
144
143
  parser.set_defaults(subcommand_func=main)
145
144
 
146
145
 
147
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
146
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
148
147
  subcommand_name = "upload"
149
148
  subcommand_help = "HTMLファイルを作業ガイドとして登録します。"
150
149
  description = "HTMLファイルを作業ガイドとして登録します。img要素のsrc属性がローカルの画像を参照している場合(http, https, dataスキーマが付与されていない)、画像もアップロードします。"
@@ -1,11 +1,10 @@
1
1
  import argparse
2
2
  import logging
3
- from typing import Optional
4
3
 
5
4
  import annofabapi
6
5
  from annofabapi.models import ProjectJobType, ProjectMemberRole
7
6
 
8
- import annofabcli
7
+ import annofabcli.common.cli
9
8
  from annofabcli.common.cli import (
10
9
  ArgumentParser,
11
10
  CommandLine,
@@ -77,7 +76,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
77
76
  parser.set_defaults(subcommand_func=main)
78
77
 
79
78
 
80
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
79
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
81
80
  subcommand_name = "delete"
82
81
  subcommand_help = "ジョブを削除する。"
83
82
  description = "ジョブを削除する。"
@@ -1,11 +1,11 @@
1
1
  import argparse
2
2
  import copy
3
3
  import logging
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from annofabapi.models import ProjectJobInfo, ProjectJobType
7
7
 
8
- import annofabcli
8
+ import annofabcli.common.cli
9
9
  from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login
10
10
  from annofabcli.common.enums import FormatArgument
11
11
  from annofabcli.common.facade import AnnofabApiFacade
@@ -18,7 +18,7 @@ class ListJob(CommandLine):
18
18
  ジョブ一覧を表示する。
19
19
  """
20
20
 
21
- def get_job_list(self, project_id: str, job_type: ProjectJobType, job_query: Optional[dict[str, Any]] = None) -> list[ProjectJobInfo]:
21
+ def get_job_list(self, project_id: str, job_type: ProjectJobType, job_query: dict[str, Any] | None = None) -> list[ProjectJobInfo]:
22
22
  """
23
23
  ジョブ一覧を取得する。
24
24
  """
@@ -34,7 +34,7 @@ class ListJob(CommandLine):
34
34
  job_list = self.service.wrapper.get_all_project_job(project_id, query_params=query_params)
35
35
  return job_list
36
36
 
37
- def print_job_list(self, project_id: str, job_type: ProjectJobType, job_query: Optional[dict[str, Any]] = None) -> None:
37
+ def print_job_list(self, project_id: str, job_type: ProjectJobType, job_query: dict[str, Any] | None = None) -> None:
38
38
  """
39
39
  ジョブ一覧を出力する
40
40
 
@@ -83,7 +83,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
83
83
  parser.set_defaults(subcommand_func=main)
84
84
 
85
85
 
86
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
86
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
87
87
  subcommand_name = "list"
88
88
  subcommand_help = "ジョブ一覧を出力します。"
89
89
  description = "ジョブ一覧を出力します。"
@@ -1,11 +1,11 @@
1
1
  import argparse
2
2
  import logging
3
3
  import sys
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  from annofabapi.models import Project, ProjectJobInfo, ProjectJobType
7
7
 
8
- import annofabcli
8
+ import annofabcli.common.cli
9
9
  from annofabcli.common.cli import (
10
10
  COMMAND_LINE_ERROR_STATUS_CODE,
11
11
  ArgumentParser,
@@ -23,7 +23,7 @@ class ListLastJob(CommandLine):
23
23
  ジョブ一覧を表示する。
24
24
  """
25
25
 
26
- def get_last_job(self, project_id: str, job_type: ProjectJobType) -> Optional[ProjectJobInfo]:
26
+ def get_last_job(self, project_id: str, job_type: ProjectJobType) -> ProjectJobInfo | None:
27
27
  """
28
28
  最新のジョブを取得する。ジョブが存在しない場合はNoneを返す。
29
29
 
@@ -163,7 +163,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
163
163
  parser.set_defaults(subcommand_func=main)
164
164
 
165
165
 
166
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
166
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
167
167
  subcommand_name = "list_last"
168
168
  subcommand_help = "複数のプロジェクトに対して、最新のジョブを出力します。"
169
169
  description = "複数のプロジェクトに対して、最新のジョブを出力します。"
@@ -1,7 +1,5 @@
1
1
  import argparse
2
- from typing import Optional
3
2
 
4
- import annofabcli
5
3
  import annofabcli.common.cli
6
4
  import annofabcli.job.delete_job
7
5
  import annofabcli.job.list_job
@@ -20,7 +18,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
20
18
  annofabcli.job.wait_job.add_parser(subparsers)
21
19
 
22
20
 
23
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
21
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
24
22
  subcommand_name = "job"
25
23
  subcommand_help = "ジョブ関係のサブコマンド"
26
24
  description = "ジョブ関係のサブコマンド"
@@ -1,12 +1,11 @@
1
1
  import argparse
2
2
  import dataclasses
3
3
  import logging
4
- from typing import Any, Optional
4
+ from typing import Any
5
5
 
6
6
  import annofabapi
7
7
  from annofabapi.models import ProjectJobType
8
8
 
9
- import annofabcli
10
9
  import annofabcli.common.cli
11
10
  from annofabcli.common.cli import (
12
11
  ArgumentParser,
@@ -20,7 +19,7 @@ from annofabcli.common.facade import AnnofabApiFacade
20
19
  logger = logging.getLogger(__name__)
21
20
 
22
21
 
23
- def get_wait_options_from_args(dict_wait_options: Optional[dict[str, Any]]) -> WaitOptions:
22
+ def get_wait_options_from_args(dict_wait_options: dict[str, Any] | None) -> WaitOptions:
24
23
  """
25
24
  デフォルト値とマージして、wait_optionsを取得する。
26
25
 
@@ -45,7 +44,7 @@ class WaitJobMain:
45
44
  self.service = service
46
45
  self.facade = AnnofabApiFacade(service)
47
46
 
48
- def wait_job(self, project_id: str, job_type: ProjectJobType, wait_options: WaitOptions, job_id: Optional[str] = None) -> None:
47
+ def wait_job(self, project_id: str, job_type: ProjectJobType, wait_options: WaitOptions, job_id: str | None = None) -> None:
49
48
  MAX_WAIT_MINUTE = wait_options.max_tries * wait_options.interval / 60 # noqa: N806
50
49
  logger.info(f"job_type='{job_type.value}', job_id='{job_id}' :: ジョブが完了するまで、最大{MAX_WAIT_MINUTE}分間待ちます。")
51
50
  result = self.service.wrapper.wait_until_job_finished(
@@ -100,7 +99,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
100
99
  parser.set_defaults(subcommand_func=main)
101
100
 
102
101
 
103
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
102
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
104
103
  subcommand_name = "wait"
105
104
  subcommand_help = "ジョブの終了を待ちます。"
106
105
  description = "ジョブの終了を待ちます。"
@@ -2,9 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  import argparse
4
4
  import logging
5
- from typing import Optional
6
5
 
7
- import annofabcli
6
+ import annofabcli.common.cli
8
7
  from annofabcli.common.cli import (
9
8
  ArgumentParser,
10
9
  CommandLine,
@@ -44,7 +43,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
44
43
  parser.set_defaults(subcommand_func=main)
45
44
 
46
45
 
47
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
46
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
48
47
  subcommand_name = "get"
49
48
  subcommand_help = "自分のアカウント情報を出力します。"
50
49
 
@@ -1,7 +1,5 @@
1
1
  import argparse
2
- from typing import Optional
3
2
 
4
- import annofabcli
5
3
  import annofabcli.common.cli
6
4
  import annofabcli.my_account.get_my_account
7
5
 
@@ -13,7 +11,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
13
11
  annofabcli.my_account.get_my_account.add_parser(subparsers)
14
12
 
15
13
 
16
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
14
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
17
15
  subcommand_name = "my_account"
18
16
  subcommand_help = "自分のアカウント関係のサブコマンド"
19
17
 
@@ -1,8 +1,7 @@
1
1
  import argparse
2
2
  import logging
3
- from typing import Optional
4
3
 
5
- import annofabcli
4
+ import annofabcli.common.cli
6
5
  from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login
7
6
  from annofabcli.common.enums import FormatArgument
8
7
  from annofabcli.common.facade import AnnofabApiFacade
@@ -39,7 +38,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
39
38
  parser.set_defaults(subcommand_func=main)
40
39
 
41
40
 
42
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
41
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
43
42
  subcommand_name = "list"
44
43
  subcommand_help = "所属している組織の一覧を出力します。"
45
44
 
@@ -1,7 +1,5 @@
1
1
  import argparse
2
- from typing import Optional
3
2
 
4
- import annofabcli
5
3
  import annofabcli.common.cli
6
4
  import annofabcli.organization.list_organization
7
5
 
@@ -13,7 +11,7 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
13
11
  annofabcli.organization.list_organization.add_parser(subparsers)
14
12
 
15
13
 
16
- def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
14
+ def add_parser(subparsers: argparse._SubParsersAction | None = None) -> argparse.ArgumentParser:
17
15
  subcommand_name = "organization"
18
16
  subcommand_help = "組織関係のサブコマンド"
19
17