annofabcli 1.100.0__tar.gz → 100.2__tar.gz

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 (214) hide show
  1. {annofabcli-1.100.0 → annofabcli-100.2}/PKG-INFO +1 -1
  2. annofabcli-100.2/annofabcli/__version__.py +1 -0
  3. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/change_annotation_attributes.py +2 -2
  4. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/list_annotation_specs_attribute.py +51 -33
  5. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/list_annotation_specs_choice.py +42 -17
  6. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/list_annotation_specs_label.py +26 -93
  7. annofabcli-100.2/annofabcli/annotation_specs/list_annotation_specs_label_attribute.py +220 -0
  8. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/subcommand_annotation_specs.py +2 -0
  9. annofabcli-100.2/annofabcli/common/annofab/annotation_specs.py +25 -0
  10. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/download.py +1 -1
  11. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/exceptions.py +2 -2
  12. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/facade.py +2 -2
  13. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/image.py +2 -2
  14. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/delete_input_data.py +6 -7
  15. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/job/delete_job.py +4 -4
  16. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization_member/list_organization_member.py +2 -3
  17. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/change_project_members.py +2 -3
  18. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/drop_project_members.py +8 -8
  19. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/invite_project_members.py +5 -6
  20. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/list_users.py +4 -4
  21. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/complete_tasks.py +2 -2
  22. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/reject_tasks.py +76 -100
  23. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/update_metadata_of_task.py +1 -1
  24. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history/list_task_history.py +1 -1
  25. {annofabcli-1.100.0 → annofabcli-100.2}/pyproject.toml +1 -1
  26. annofabcli-1.100.0/annofabcli/__version__.py +0 -1
  27. {annofabcli-1.100.0 → annofabcli-100.2}/LICENSE +0 -0
  28. {annofabcli-1.100.0 → annofabcli-100.2}/README.md +0 -0
  29. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/__init__.py +0 -0
  30. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/__main__.py +0 -0
  31. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/__init__.py +0 -0
  32. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/annotation_query.py +0 -0
  33. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/change_annotation_properties.py +0 -0
  34. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/copy_annotation.py +0 -0
  35. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/delete_annotation.py +0 -0
  36. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/download_annotation_zip.py +0 -0
  37. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/dump_annotation.py +0 -0
  38. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/import_annotation.py +0 -0
  39. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/list_annotation.py +0 -0
  40. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/list_annotation_count.py +0 -0
  41. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/merge_segmentation.py +0 -0
  42. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/remove_segmentation_overlap.py +0 -0
  43. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/restore_annotation.py +0 -0
  44. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation/subcommand_annotation.py +0 -0
  45. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/__init__.py +0 -0
  46. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/add_attribute_restriction.py +0 -0
  47. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/attribute_restriction.py +0 -0
  48. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/export_annotation_specs.py +0 -0
  49. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/get_annotation_specs_with_attribute_id_replaced.py +0 -0
  50. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/get_annotation_specs_with_choice_id_replaced.py +0 -0
  51. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/get_annotation_specs_with_label_id_replaced.py +0 -0
  52. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/list_annotation_specs_history.py +0 -0
  53. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/list_attribute_restriction.py +0 -0
  54. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/list_label_color.py +0 -0
  55. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/annotation_specs/put_label_color.py +0 -0
  56. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/__init__.py +0 -0
  57. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/delete_comment.py +0 -0
  58. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/download_comment_json.py +0 -0
  59. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/list_all_comment.py +0 -0
  60. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/list_comment.py +0 -0
  61. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/put_comment.py +0 -0
  62. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/put_comment_simply.py +0 -0
  63. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/put_inspection_comment.py +0 -0
  64. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/put_inspection_comment_simply.py +0 -0
  65. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/put_onhold_comment.py +0 -0
  66. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/put_onhold_comment_simply.py +0 -0
  67. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/subcommand_comment.py +0 -0
  68. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/comment/utils.py +0 -0
  69. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/__init__.py +0 -0
  70. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/annofab/__init__.py +0 -0
  71. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/annofab/project.py +0 -0
  72. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/bokeh.py +0 -0
  73. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/cli.py +0 -0
  74. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/dataclasses.py +0 -0
  75. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/enums.py +0 -0
  76. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/pandas.py +0 -0
  77. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/type_util.py +0 -0
  78. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/typing.py +0 -0
  79. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/utils.py +0 -0
  80. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/common/visualize.py +0 -0
  81. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/data/logging.yaml +0 -0
  82. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/experimental/__init__.py +0 -0
  83. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/experimental/list_out_of_range_annotation_for_movie.py +0 -0
  84. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/experimental/subcommand_experimental.py +0 -0
  85. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/filesystem/__init__.py +0 -0
  86. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/filesystem/draw_annotation.py +0 -0
  87. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/filesystem/filter_annotation.py +0 -0
  88. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/filesystem/mask_user_info.py +0 -0
  89. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/filesystem/merge_annotation.py +0 -0
  90. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/filesystem/subcommand_filesystem.py +0 -0
  91. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/__init__.py +0 -0
  92. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/change_input_data_name.py +0 -0
  93. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/copy_input_data.py +0 -0
  94. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/delete_metadata_key_of_input_data.py +0 -0
  95. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/download_input_data_json.py +0 -0
  96. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/list_all_input_data.py +0 -0
  97. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/list_all_input_data_merged_task.py +0 -0
  98. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/list_input_data.py +0 -0
  99. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/put_input_data.py +0 -0
  100. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/put_input_data_with_zip.py +0 -0
  101. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/subcommand_input_data.py +0 -0
  102. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/update_metadata_of_input_data.py +0 -0
  103. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/input_data/utils.py +0 -0
  104. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/instruction/__init__.py +0 -0
  105. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/instruction/copy_instruction.py +0 -0
  106. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/instruction/download_instruction.py +0 -0
  107. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/instruction/list_instruction_history.py +0 -0
  108. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/instruction/subcommand_instruction.py +0 -0
  109. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/instruction/upload_instruction.py +0 -0
  110. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/job/__init__.py +0 -0
  111. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/job/list_job.py +0 -0
  112. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/job/list_last_job.py +0 -0
  113. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/job/subcommand_job.py +0 -0
  114. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/job/wait_job.py +0 -0
  115. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/my_account/__init__.py +0 -0
  116. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/my_account/get_my_account.py +0 -0
  117. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/my_account/subcommand_my_account.py +0 -0
  118. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization/__init__.py +0 -0
  119. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization/list_organization.py +0 -0
  120. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization/subcommand_organization.py +0 -0
  121. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization_member/__init__.py +0 -0
  122. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization_member/change_organization_member.py +0 -0
  123. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization_member/delete_organization_member.py +0 -0
  124. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization_member/invite_organization_member.py +0 -0
  125. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/organization_member/subcommand_organization_member.py +0 -0
  126. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/__init__.py +0 -0
  127. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/change_project_status.py +0 -0
  128. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/copy_project.py +0 -0
  129. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/diff_projects.py +0 -0
  130. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/list_project.py +0 -0
  131. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/put_project.py +0 -0
  132. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project/subcommand_project.py +0 -0
  133. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/__init__.py +0 -0
  134. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/copy_project_members.py +0 -0
  135. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/put_project_members.py +0 -0
  136. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/project_member/subcommand_project_member.py +0 -0
  137. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/py.typed +0 -0
  138. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/__init__.py +0 -0
  139. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/mask_visualization_dir.py +0 -0
  140. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/merge_visualization_dir.py +0 -0
  141. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/subcommand_stat_visualization.py +0 -0
  142. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/summarize_whole_performance_csv.py +0 -0
  143. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/write_graph.py +0 -0
  144. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/stat_visualization/write_performance_rating_csv.py +0 -0
  145. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/__init__.py +0 -0
  146. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/histogram.py +0 -0
  147. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/linegraph.py +0 -0
  148. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/list_annotation_attribute.py +0 -0
  149. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/list_annotation_attribute_filled_count.py +0 -0
  150. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/list_annotation_count.py +0 -0
  151. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/list_annotation_duration.py +0 -0
  152. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/list_video_duration.py +0 -0
  153. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/list_worktime.py +0 -0
  154. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/scatter.py +0 -0
  155. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/subcommand_statistics.py +0 -0
  156. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/summarize_task_count.py +0 -0
  157. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/summarize_task_count_by_task_id_group.py +0 -0
  158. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/summarize_task_count_by_user.py +0 -0
  159. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/__init__.py +0 -0
  160. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/__init__.py +0 -0
  161. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/actual_worktime.py +0 -0
  162. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/annotation_count.py +0 -0
  163. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/cumulative_productivity.py +0 -0
  164. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/custom_production_volume.py +0 -0
  165. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/input_data_count.py +0 -0
  166. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/inspection_comment_count.py +0 -0
  167. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/productivity_per_date.py +0 -0
  168. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/project_performance.py +0 -0
  169. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/task.py +0 -0
  170. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/task_history.py +0 -0
  171. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/task_worktime_by_phase_user.py +0 -0
  172. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/user.py +0 -0
  173. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/user_performance.py +0 -0
  174. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/whole_performance.py +0 -0
  175. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/whole_productivity_per_date.py +0 -0
  176. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/dataframe/worktime_per_date.py +0 -0
  177. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/filtering_query.py +0 -0
  178. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/model.py +0 -0
  179. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/project_dir.py +0 -0
  180. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualization/visualization_source_files.py +0 -0
  181. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualize_annotation_count.py +0 -0
  182. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualize_annotation_duration.py +0 -0
  183. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualize_statistics.py +0 -0
  184. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/statistics/visualize_video_duration.py +0 -0
  185. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/supplementary/__init__.py +0 -0
  186. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/supplementary/delete_supplementary_data.py +0 -0
  187. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/supplementary/list_supplementary_data.py +0 -0
  188. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/supplementary/put_supplementary_data.py +0 -0
  189. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/supplementary/subcommand_supplementary.py +0 -0
  190. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/__init__.py +0 -0
  191. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/cancel_acceptance.py +0 -0
  192. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/change_operator.py +0 -0
  193. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/change_status_to_break.py +0 -0
  194. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/change_status_to_on_hold.py +0 -0
  195. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/copy_tasks.py +0 -0
  196. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/delete_metadata_key_of_task.py +0 -0
  197. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/delete_tasks.py +0 -0
  198. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/download_task_json.py +0 -0
  199. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/list_all_tasks.py +0 -0
  200. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/list_all_tasks_added_task_history.py +0 -0
  201. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/list_tasks.py +0 -0
  202. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/list_tasks_added_task_history.py +0 -0
  203. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/put_tasks.py +0 -0
  204. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/put_tasks_by_count.py +0 -0
  205. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task/subcommand_task.py +0 -0
  206. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history/__init__.py +0 -0
  207. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history/download_task_history_json.py +0 -0
  208. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history/list_all_task_history.py +0 -0
  209. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history/subcommand_task_history.py +0 -0
  210. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history_event/__init__.py +0 -0
  211. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history_event/download_task_history_event_json.py +0 -0
  212. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history_event/list_all_task_history_event.py +0 -0
  213. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history_event/list_worktime.py +0 -0
  214. {annofabcli-1.100.0 → annofabcli-100.2}/annofabcli/task_history_event/subcommand_task_history_event.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: annofabcli
3
- Version: 1.100.0
3
+ Version: 100.2
4
4
  Summary: Utility Command Line Interface for AnnoFab
5
5
  Home-page: https://github.com/kurusugawa-computer/annofab-cli
6
6
  License: MIT
@@ -0,0 +1 @@
1
+ __version__ = "100.2" # `poetry-dynamic-versioning`を使ってGitHubのバージョンタグを取得している。変更不要
@@ -138,12 +138,12 @@ class ChangeAnnotationAttributesMain(CommandLineWithConfirm):
138
138
 
139
139
  task: Task = Task.from_dict(dict_task)
140
140
  if task.status == TaskStatus.WORKING:
141
- logger.warning(f"task_id={task_id}: タスクが作業中状態のため、スキップします。")
141
+ logger.warning(f"task_id='{task_id}': タスクが作業中状態のため、スキップします。")
142
142
  return False
143
143
 
144
144
  if not self.is_force: # noqa: SIM102
145
145
  if task.status == TaskStatus.COMPLETE:
146
- logger.warning(f"task_id={task_id}: タスクが完了状態のため、スキップします。")
146
+ logger.warning(f"task_id='{task_id}': タスクが完了状態のため、スキップします。")
147
147
  return False
148
148
 
149
149
  annotation_list = self.get_annotation_list_for_task(task_id, annotation_query)
@@ -16,6 +16,7 @@ from dataclasses_json import DataClassJsonMixin
16
16
 
17
17
  import annofabcli
18
18
  import annofabcli.common.cli
19
+ from annofabcli.common.annofab.annotation_specs import keybind_to_text
19
20
  from annofabcli.common.cli import (
20
21
  COMMAND_LINE_ERROR_STATUS_CODE,
21
22
  ArgumentParser,
@@ -24,15 +25,16 @@ from annofabcli.common.cli import (
24
25
  )
25
26
  from annofabcli.common.enums import FormatArgument
26
27
  from annofabcli.common.facade import AnnofabApiFacade
27
- from annofabcli.common.utils import print_csv
28
+ from annofabcli.common.utils import print_according_to_format, print_csv
28
29
 
29
30
  logger = logging.getLogger(__name__)
30
31
 
31
32
 
32
33
  @dataclass
33
- class AttributeForCsv(DataClassJsonMixin):
34
+ class FlattenAttribute(DataClassJsonMixin):
34
35
  """
35
- CSV用の属性情報を格納するクラスです。
36
+ ネストされていないフラットな属性情報を格納するクラスです。
37
+ 選択肢の一覧などは格納できません。
36
38
  """
37
39
 
38
40
  attribute_id: str
@@ -45,7 +47,7 @@ class AttributeForCsv(DataClassJsonMixin):
45
47
  attribute_name_en: Optional[str]
46
48
  attribute_name_ja: Optional[str]
47
49
  attribute_name_vi: Optional[str]
48
- type: str
50
+ attribute_type: str
49
51
  """属性の種類"""
50
52
  default: Optional[Union[str, bool, int]]
51
53
  """デフォルト値"""
@@ -60,6 +62,7 @@ class AttributeForCsv(DataClassJsonMixin):
60
62
  """制約の個数"""
61
63
  reference_label_count: int
62
64
  """参照されているラベルの個数"""
65
+ keybind: Optional[str]
63
66
 
64
67
 
65
68
  def create_relationship_between_attribute_and_label(labels_v3: list[dict[str, Any]]) -> dict[str, set[str]]:
@@ -78,11 +81,11 @@ def create_relationship_between_attribute_and_label(labels_v3: list[dict[str, An
78
81
  return result
79
82
 
80
83
 
81
- def create_df_from_additionals(
84
+ def create_flatten_attribute_list_from_additionals(
82
85
  additionals_v3: list[dict[str, Any]], labels_v3: list[dict[str, Any]], restrictions: list[dict[str, Any]]
83
- ) -> pandas.DataFrame:
86
+ ) -> list[FlattenAttribute]:
84
87
  """
85
- APIから取得した属性情報(v3版)から、pandas.DataFrameを生成します。
88
+ APIから取得した属性情報(v3版)から、属性情報の一覧を生成します。
86
89
 
87
90
  Args:
88
91
  additionals_v3: APIから取得した属性情報(v3版)
@@ -98,52 +101,60 @@ def create_df_from_additionals(
98
101
  # keyが属性ID、valueが属性に紐づくラベルのIDのsetであるdict
99
102
  dict_label_ids = create_relationship_between_attribute_and_label(labels_v3)
100
103
 
101
- def dict_additional_to_dataclass(additional: dict[str, Any]) -> AttributeForCsv:
104
+ def dict_additional_to_dataclass(additional: dict[str, Any]) -> FlattenAttribute:
102
105
  """
103
106
  辞書の属性情報をDataClassのラベル情報に変換します。
104
107
  """
105
108
  attribute_id = additional["additional_data_definition_id"]
106
109
  additional_name = additional["name"]
107
- return AttributeForCsv(
110
+ return FlattenAttribute(
108
111
  attribute_id=attribute_id,
109
112
  attribute_name_en=get_message_with_lang(additional_name, lang=Lang.EN_US),
110
113
  attribute_name_ja=get_message_with_lang(additional_name, lang=Lang.JA_JP),
111
114
  attribute_name_vi=get_message_with_lang(additional_name, lang=Lang.VI_VN),
112
- type=additional["type"],
115
+ attribute_type=additional["type"],
113
116
  default=additional["default"],
114
117
  read_only=additional["read_only"],
115
118
  choice_count=len(additional["choices"]),
116
119
  restriction_count=dict_restriction_count[attribute_id],
117
120
  reference_label_count=len(dict_label_ids[attribute_id]),
121
+ keybind=keybind_to_text(additional["keybind"]),
118
122
  )
119
123
 
120
- new_labels = [dict_additional_to_dataclass(e) for e in additionals_v3]
121
-
122
- columns = [
123
- "attribute_id",
124
- "attribute_name_en",
125
- "attribute_name_ja",
126
- "attribute_name_vi",
127
- "type",
128
- "default",
129
- "read_only",
130
- "choice_count",
131
- "restriction_count",
132
- "reference_label_count",
133
- ]
134
-
135
- df = pandas.DataFrame(new_labels, columns=columns)
136
- return df
124
+ return [dict_additional_to_dataclass(e) for e in additionals_v3]
137
125
 
138
126
 
139
127
  class PrintAnnotationSpecsAttribute(CommandLine):
140
128
  COMMON_MESSAGE = "annofabcli annotation_specs list_attribute: error:"
141
129
 
142
- def print_annotation_specs_attribute(self, annotation_specs_v3: dict[str, Any], arg_format: str, output: Optional[str] = None) -> None:
143
- if arg_format == FormatArgument.CSV.value:
144
- df = create_df_from_additionals(annotation_specs_v3["additionals"], annotation_specs_v3["labels"], annotation_specs_v3["restrictions"])
130
+ def print_annotation_specs_attribute(
131
+ self, annotation_specs_v3: dict[str, Any], output_format: FormatArgument, output: Optional[str] = None
132
+ ) -> None:
133
+ attribute_list = create_flatten_attribute_list_from_additionals(
134
+ annotation_specs_v3["additionals"], annotation_specs_v3["labels"], annotation_specs_v3["restrictions"]
135
+ )
136
+ logger.info(f"{len(attribute_list)} 件の属性情報を出力します。")
137
+ if output_format == FormatArgument.CSV:
138
+ columns = [
139
+ "attribute_id",
140
+ "attribute_name_en",
141
+ "attribute_name_ja",
142
+ "attribute_name_vi",
143
+ "type",
144
+ "default",
145
+ "read_only",
146
+ "choice_count",
147
+ "restriction_count",
148
+ "reference_label_count",
149
+ "keybind",
150
+ ]
151
+
152
+ df = pandas.DataFrame(attribute_list, columns=columns)
145
153
  print_csv(df, output)
146
154
 
155
+ elif output_format in [FormatArgument.JSON, FormatArgument.PRETTY_JSON]:
156
+ print_according_to_format([e.to_dict() for e in attribute_list], format=output_format, output=output)
157
+
147
158
  def get_history_id_from_before_index(self, project_id: str, before: int) -> Optional[str]:
148
159
  histories, _ = self.service.api.get_annotation_specs_histories(project_id)
149
160
  if before + 1 > len(histories):
@@ -177,7 +188,7 @@ class PrintAnnotationSpecsAttribute(CommandLine):
177
188
  else:
178
189
  raise RuntimeError("'--project_id'か'--annotation_specs_json'のどちらかを指定する必要があります。")
179
190
 
180
- self.print_annotation_specs_attribute(annotation_specs, arg_format=args.format, output=args.output)
191
+ self.print_annotation_specs_attribute(annotation_specs, output_format=FormatArgument(args.format), output=args.output)
181
192
 
182
193
 
183
194
  def parse_args(parser: argparse.ArgumentParser) -> None:
@@ -216,7 +227,14 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
216
227
  ),
217
228
  )
218
229
 
219
- parser.add_argument("-f", "--format", type=str, choices=[FormatArgument.CSV.value], default=FormatArgument.CSV.value, help="出力フォーマット ")
230
+ parser.add_argument(
231
+ "-f",
232
+ "--format",
233
+ type=str,
234
+ choices=[FormatArgument.CSV.value, FormatArgument.JSON.value, FormatArgument.PRETTY_JSON.value],
235
+ default=FormatArgument.CSV.value,
236
+ help="出力フォーマット ",
237
+ )
220
238
 
221
239
  argument_parser.add_output()
222
240
 
@@ -232,7 +250,7 @@ def main(args: argparse.Namespace) -> None:
232
250
  def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
233
251
  subcommand_name = "list_attribute"
234
252
 
235
- subcommand_help = "アノテーション仕様の属性情報を出力する"
253
+ subcommand_help = "アノテーション仕様の属性情報を出力します。"
236
254
 
237
255
  parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help)
238
256
  parse_args(parser)
@@ -15,6 +15,7 @@ from dataclasses_json import DataClassJsonMixin
15
15
 
16
16
  import annofabcli
17
17
  import annofabcli.common.cli
18
+ from annofabcli.common.annofab.annotation_specs import keybind_to_text
18
19
  from annofabcli.common.cli import (
19
20
  COMMAND_LINE_ERROR_STATUS_CODE,
20
21
  ArgumentParser,
@@ -23,13 +24,13 @@ from annofabcli.common.cli import (
23
24
  )
24
25
  from annofabcli.common.enums import FormatArgument
25
26
  from annofabcli.common.facade import AnnofabApiFacade
26
- from annofabcli.common.utils import print_csv
27
+ from annofabcli.common.utils import print_according_to_format, print_csv
27
28
 
28
29
  logger = logging.getLogger(__name__)
29
30
 
30
31
 
31
32
  @dataclass
32
- class ChoiceForCsv(DataClassJsonMixin):
33
+ class FlattenChoice(DataClassJsonMixin):
33
34
  """
34
35
  CSV用の選択肢情報を格納するクラスです。
35
36
  """
@@ -54,11 +55,13 @@ class ChoiceForCsv(DataClassJsonMixin):
54
55
  choice_name_vi: Optional[str]
55
56
  is_default: bool
56
57
  """初期値として設定されているかどうか"""
58
+ keybind: Optional[str]
59
+ """キーバインド"""
57
60
 
58
61
 
59
- def create_df_from_additionals(additionals_v3: list[dict[str, Any]]) -> pandas.DataFrame:
62
+ def create_flatten_choice_list_from_additionals(additionals_v3: list[dict[str, Any]]) -> list[FlattenChoice]:
60
63
  """
61
- APIから取得した属性情報(v3版)から、pandas.DataFrameを生成します。
64
+ APIから取得した属性情報(v3版)から、選択肢情報の一覧を生成します。
62
65
 
63
66
  Args:
64
67
  additionals_v3: APIから取得した属性情報(v3版)
@@ -67,7 +70,7 @@ def create_df_from_additionals(additionals_v3: list[dict[str, Any]]) -> pandas.D
67
70
  def dict_choice_to_dataclass(
68
71
  choice: dict[str, Any],
69
72
  additional: dict[str, Any],
70
- ) -> ChoiceForCsv:
73
+ ) -> FlattenChoice:
71
74
  """
72
75
  辞書の選択肢情報をDataClassの選択肢情報に変換します。
73
76
  """
@@ -77,7 +80,7 @@ def create_df_from_additionals(additionals_v3: list[dict[str, Any]]) -> pandas.D
77
80
  choice_id = choice["choice_id"]
78
81
  choice_name = choice["name"]
79
82
  is_default = additional["default"] == choice_id
80
- return ChoiceForCsv(
83
+ return FlattenChoice(
81
84
  attribute_id=attribute_id,
82
85
  attribute_name_en=get_english_message(additional_name),
83
86
  attribute_type=additional["type"],
@@ -86,6 +89,7 @@ def create_df_from_additionals(additionals_v3: list[dict[str, Any]]) -> pandas.D
86
89
  choice_name_ja=get_message_with_lang(choice_name, lang=Lang.JA_JP),
87
90
  choice_name_vi=get_message_with_lang(choice_name, lang=Lang.VI_VN),
88
91
  is_default=is_default,
92
+ keybind=keybind_to_text(choice["keybind"]),
89
93
  )
90
94
 
91
95
  tmp_list = []
@@ -95,19 +99,33 @@ def create_df_from_additionals(additionals_v3: list[dict[str, Any]]) -> pandas.D
95
99
  continue
96
100
  for choice in choices:
97
101
  tmp_list.append(dict_choice_to_dataclass(choice, additional)) # noqa: PERF401
98
-
99
- columns = ["attribute_id", "attribute_name_en", "attribute_type", "choice_id", "choice_name_en", "choice_name_ja", "choice_name_vi", "is_default"]
100
- df = pandas.DataFrame(tmp_list, columns=columns)
101
- return df
102
+ return tmp_list
102
103
 
103
104
 
104
105
  class PrintAnnotationSpecsAttribute(CommandLine):
105
106
  COMMON_MESSAGE = "annofabcli annotation_specs list_choice: error:"
106
107
 
107
- def print_annotation_specs_choice(self, annotation_specs_v3: dict[str, Any], arg_format: str, output: Optional[str] = None) -> None:
108
- if arg_format == FormatArgument.CSV.value:
109
- df = create_df_from_additionals(annotation_specs_v3["additionals"])
110
- print_csv(df, output)
108
+ def print_annotation_specs_choice(self, annotation_specs_v3: dict[str, Any], output_format: FormatArgument, output: Optional[str] = None) -> None:
109
+ choice_list = create_flatten_choice_list_from_additionals(annotation_specs_v3["additionals"])
110
+ logger.info(f"{len(choice_list)} 件の選択肢情報を出力します。")
111
+
112
+ if output_format == FormatArgument.CSV:
113
+ df = pandas.DataFrame(choice_list)
114
+ columns = [
115
+ "attribute_id",
116
+ "attribute_name_en",
117
+ "attribute_type",
118
+ "choice_id",
119
+ "choice_name_en",
120
+ "choice_name_ja",
121
+ "choice_name_vi",
122
+ "is_default",
123
+ "keybind",
124
+ ]
125
+ print_csv(df[columns], output)
126
+
127
+ elif output_format in [FormatArgument.JSON, FormatArgument.PRETTY_JSON]:
128
+ print_according_to_format([e.to_dict() for e in choice_list], format=output_format, output=output)
111
129
 
112
130
  def get_history_id_from_before_index(self, project_id: str, before: int) -> Optional[str]:
113
131
  histories, _ = self.service.api.get_annotation_specs_histories(project_id)
@@ -144,7 +162,7 @@ class PrintAnnotationSpecsAttribute(CommandLine):
144
162
  else:
145
163
  raise RuntimeError("'--project_id'か'--annotation_specs_json'のどちらかを指定する必要があります。")
146
164
 
147
- self.print_annotation_specs_choice(annotation_specs, arg_format=args.format, output=args.output)
165
+ self.print_annotation_specs_choice(annotation_specs, output_format=FormatArgument(args.format), output=args.output)
148
166
 
149
167
 
150
168
  def parse_args(parser: argparse.ArgumentParser) -> None:
@@ -183,7 +201,14 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
183
201
  ),
184
202
  )
185
203
 
186
- parser.add_argument("-f", "--format", type=str, choices=[FormatArgument.CSV.value], default=FormatArgument.CSV.value, help="出力フォーマット ")
204
+ parser.add_argument(
205
+ "-f",
206
+ "--format",
207
+ type=str,
208
+ choices=[FormatArgument.CSV.value, FormatArgument.JSON.value, FormatArgument.PRETTY_JSON.value],
209
+ default=FormatArgument.CSV.value,
210
+ help="出力フォーマット ",
211
+ )
187
212
 
188
213
  argument_parser.add_output()
189
214
 
@@ -199,7 +224,7 @@ def main(args: argparse.Namespace) -> None:
199
224
  def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
200
225
  subcommand_name = "list_choice"
201
226
 
202
- subcommand_help = "アノテーション仕様のドロップダウンまたはラジオボタン属性の選択肢情報を出力する"
227
+ subcommand_help = "アノテーション仕様のドロップダウンまたはラジオボタン属性の選択肢情報を出力します。"
203
228
 
204
229
  parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help)
205
230
  parse_args(parser)
@@ -15,6 +15,7 @@ from dataclasses_json import DataClassJsonMixin
15
15
 
16
16
  import annofabcli
17
17
  import annofabcli.common.cli
18
+ from annofabcli.common.annofab.annotation_specs import keybind_to_text
18
19
  from annofabcli.common.cli import (
19
20
  COMMAND_LINE_ERROR_STATUS_CODE,
20
21
  ArgumentParser,
@@ -22,16 +23,16 @@ from annofabcli.common.cli import (
22
23
  build_annofabapi_resource_and_login,
23
24
  )
24
25
  from annofabcli.common.enums import FormatArgument
25
- from annofabcli.common.facade import AnnofabApiFacade, convert_annotation_specs_labels_v2_to_v1
26
+ from annofabcli.common.facade import AnnofabApiFacade
26
27
  from annofabcli.common.utils import print_csv
27
28
 
28
29
  logger = logging.getLogger(__name__)
29
30
 
30
31
 
31
32
  @dataclass
32
- class LabelForCsv(DataClassJsonMixin):
33
+ class FlattenLabel(DataClassJsonMixin):
33
34
  """
34
- CSV用のラベル情報を格納するクラスです。
35
+ ラベル情報を格納するクラスです。
35
36
  """
36
37
 
37
38
  label_id: str
@@ -50,6 +51,8 @@ class LabelForCsv(DataClassJsonMixin):
50
51
  Notes:
51
52
  APIでは`additional_data_definitions`のような名前だが、分かりにくかったので"attribute"という名前に変えた。
52
53
  """
54
+ keybind: Optional[str]
55
+ """キーバインド"""
53
56
 
54
57
 
55
58
  def decimal_to_hex_color(red: int, green: int, blue: int) -> str:
@@ -63,22 +66,22 @@ def decimal_to_hex_color(red: int, green: int, blue: int) -> str:
63
66
  return f"#{red:02X}{green:02X}{blue:02X}"
64
67
 
65
68
 
66
- def create_df_from_labels(labels_v3: list[dict[str, Any]]) -> pandas.DataFrame:
69
+ def create_label_list(labels_v3: list[dict[str, Any]]) -> list[FlattenLabel]:
67
70
  """
68
- APIから取得したラベル情報(v3版)から、pandas.DataFrameを生成します。
71
+ APIから取得したラベル情報(v3版)から、`FlattenLabel`のlistを生成します。
69
72
 
70
73
  Args:
71
74
  labels_v3: APIから取得したラベル情報(v3版)
72
75
  """
73
76
 
74
- def dict_label_to_dataclass(label: dict[str, Any]) -> LabelForCsv:
77
+ def dict_label_to_dataclass(label: dict[str, Any]) -> FlattenLabel:
75
78
  """
76
79
  辞書のラベル情報をDataClassのラベル情報に変換します。
77
80
  """
78
81
  label_color = label["color"]
79
82
  hex_color_code = decimal_to_hex_color(label_color["red"], label_color["green"], label_color["blue"])
80
83
  additional_data_definitions = label["additional_data_definitions"]
81
- return LabelForCsv(
84
+ return FlattenLabel(
82
85
  label_id=label["label_id"],
83
86
  label_name_en=get_message_with_lang(label["label_name"], lang=Lang.EN_US),
84
87
  label_name_ja=get_message_with_lang(label["label_name"], lang=Lang.JA_JP),
@@ -86,21 +89,10 @@ def create_df_from_labels(labels_v3: list[dict[str, Any]]) -> pandas.DataFrame:
86
89
  annotation_type=label["annotation_type"],
87
90
  color=hex_color_code,
88
91
  attribute_count=len(additional_data_definitions),
92
+ keybind=keybind_to_text(label["keybind"]),
89
93
  )
90
94
 
91
- new_labels = [dict_label_to_dataclass(e) for e in labels_v3]
92
-
93
- columns = [
94
- "label_id",
95
- "label_name_en",
96
- "label_name_ja",
97
- "label_name_vi",
98
- "annotation_type",
99
- "color",
100
- "attribute_count",
101
- ]
102
- df = pandas.DataFrame(new_labels, columns=columns)
103
- return df
95
+ return [dict_label_to_dataclass(e) for e in labels_v3]
104
96
 
105
97
 
106
98
  class PrintAnnotationSpecsLabel(CommandLine):
@@ -110,69 +102,16 @@ class PrintAnnotationSpecsLabel(CommandLine):
110
102
 
111
103
  COMMON_MESSAGE = "annofabcli annotation_specs list_label: error:"
112
104
 
113
- def print_annotation_specs_label(self, annotation_specs_v3: dict[str, Any], arg_format: str, output: Optional[str] = None) -> None:
114
- # アノテーション仕様のv2とv3はほとんど同じなので、`convert_annotation_specs_labels_v2_to_v1`にはV3のアノテーション仕様を渡す
115
- labels_v1 = convert_annotation_specs_labels_v2_to_v1(
116
- labels_v2=annotation_specs_v3["labels"], additionals_v2=annotation_specs_v3["additionals"]
117
- )
118
- if arg_format == "text":
119
- self._print_text_format_labels(labels_v1, output=output)
105
+ def print_annotation_specs_label(self, annotation_specs_v3: dict[str, Any], output_format: FormatArgument, output: Optional[str] = None) -> None:
106
+ label_list = create_label_list(annotation_specs_v3["labels"])
107
+ if output_format == FormatArgument.CSV:
108
+ df = pandas.DataFrame(label_list)
120
109
 
121
- elif arg_format == FormatArgument.CSV.value:
122
- df = create_df_from_labels(annotation_specs_v3["labels"])
123
- print_csv(df, output)
110
+ columns = ["label_id", "label_name_en", "label_name_ja", "label_name_vi", "annotation_type", "color", "attribute_count", "keybind"]
111
+ print_csv(df[columns], output)
124
112
 
125
- elif arg_format in [FormatArgument.JSON.value, FormatArgument.PRETTY_JSON.value]:
126
- annofabcli.common.utils.print_according_to_format(target=labels_v1, format=FormatArgument(arg_format), output=output)
127
-
128
- @staticmethod
129
- def _get_name_tuple(messages: list[dict[str, Any]]) -> tuple[str, str]:
130
- """
131
- 日本語名、英語名のタプルを取得する。
132
- """
133
- ja_name = [e["message"] for e in messages if e["lang"] == "ja-JP"][0] # noqa: RUF015
134
- en_name = [e["message"] for e in messages if e["lang"] == "en-US"][0] # noqa: RUF015
135
- return (ja_name, en_name)
136
-
137
- @staticmethod
138
- def _print_text_format_labels(labels: list[dict[str, Any]], output: Optional[str] = None) -> None:
139
- output_lines = []
140
- for label in labels:
141
- output_lines.append(
142
- "\t".join(
143
- [
144
- label["label_id"],
145
- label["annotation_type"],
146
- *PrintAnnotationSpecsLabel._get_name_tuple(label["label_name"]["messages"]),
147
- ]
148
- )
149
- )
150
- for additional_data_definition in label["additional_data_definitions"]:
151
- output_lines.append(
152
- "\t".join(
153
- [
154
- "",
155
- additional_data_definition["additional_data_definition_id"],
156
- additional_data_definition["type"],
157
- *PrintAnnotationSpecsLabel._get_name_tuple(additional_data_definition["name"]["messages"]),
158
- ]
159
- )
160
- )
161
- if additional_data_definition["type"] in ["choice", "select"]:
162
- for choice in additional_data_definition["choices"]:
163
- output_lines.append( # noqa: PERF401
164
- "\t".join(
165
- [
166
- "",
167
- "",
168
- choice["choice_id"],
169
- "",
170
- *PrintAnnotationSpecsLabel._get_name_tuple(choice["name"]["messages"]),
171
- ]
172
- )
173
- )
174
-
175
- annofabcli.common.utils.output_string("\n".join(output_lines), output)
113
+ elif output_format in [FormatArgument.JSON, FormatArgument.PRETTY_JSON]:
114
+ annofabcli.common.utils.print_according_to_format([e.to_dict() for e in label_list], format=FormatArgument(output_format), output=output)
176
115
 
177
116
  def get_history_id_from_before_index(self, project_id: str, before: int) -> Optional[str]:
178
117
  histories, _ = self.service.api.get_annotation_specs_histories(project_id)
@@ -210,7 +149,7 @@ class PrintAnnotationSpecsLabel(CommandLine):
210
149
  else:
211
150
  raise RuntimeError("'--project_id'か'--annotation_specs_json'のどちらかを指定する必要があります。")
212
151
 
213
- self.print_annotation_specs_label(annotation_specs, arg_format=args.format, output=args.output)
152
+ self.print_annotation_specs_label(annotation_specs, output_format=FormatArgument(args.format), output=args.output)
214
153
 
215
154
 
216
155
  def parse_args(parser: argparse.ArgumentParser) -> None:
@@ -253,13 +192,9 @@ def parse_args(parser: argparse.ArgumentParser) -> None:
253
192
  "-f",
254
193
  "--format",
255
194
  type=str,
256
- choices=["text", FormatArgument.CSV.value, FormatArgument.PRETTY_JSON.value, FormatArgument.JSON.value],
257
- default="text",
258
- help=f"出力フォーマット "
259
- "text: 人が見やすい形式, "
260
- f"{FormatArgument.CSV.value}: ラベル情報の一覧が記載されたCSV, "
261
- f"{FormatArgument.PRETTY_JSON.value}: インデントされたJSON, "
262
- f"{FormatArgument.JSON.value}: フラットなJSON",
195
+ choices=[FormatArgument.CSV.value, FormatArgument.JSON.value, FormatArgument.PRETTY_JSON.value],
196
+ default=FormatArgument.CSV.value,
197
+ help="出力フォーマット ",
263
198
  )
264
199
 
265
200
  argument_parser.add_output()
@@ -276,10 +211,8 @@ def main(args: argparse.Namespace) -> None:
276
211
  def add_parser(subparsers: Optional[argparse._SubParsersAction] = None) -> argparse.ArgumentParser:
277
212
  subcommand_name = "list_label"
278
213
 
279
- subcommand_help = "アノテーション仕様のラベル情報を出力する"
280
-
281
- description = "アノテーション仕様のラベル情報を出力する"
214
+ subcommand_help = "アノテーション仕様のラベル情報を出力します。"
282
215
 
283
- parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help, description)
216
+ parser = annofabcli.common.cli.add_parser(subparsers, subcommand_name, subcommand_help)
284
217
  parse_args(parser)
285
218
  return parser