superannotate 4.4.19b2__tar.gz → 4.4.20.dev1__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 (140) hide show
  1. {superannotate-4.4.19b2/src/superannotate.egg-info → superannotate-4.4.20.dev1}/PKG-INFO +1 -1
  2. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/__init__.py +1 -1
  3. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/sdk_interface.py +186 -77
  4. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/project.py +1 -1
  5. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/serviceproviders.py +8 -0
  6. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/annotations.py +59 -36
  7. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/images.py +20 -7
  8. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/controller.py +4 -5
  9. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/annotation.py +1 -1
  10. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/item.py +27 -0
  11. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/stream_data_handler.py +3 -1
  12. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1/src/superannotate.egg-info}/PKG-INFO +1 -1
  13. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate.egg-info/SOURCES.txt +0 -1
  14. superannotate-4.4.19b2/src/superannotate/logger.py +0 -35
  15. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/LICENSE +0 -0
  16. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/MANIFEST.in +0 -0
  17. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/README.rst +0 -0
  18. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/requirements.txt +0 -0
  19. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/setup.cfg +0 -0
  20. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/setup.py +0 -0
  21. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/__init__.py +0 -0
  22. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/__init__.py +0 -0
  23. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/analytics/__init__.py +0 -0
  24. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/analytics/aggregators.py +0 -0
  25. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/analytics/common.py +0 -0
  26. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/bin/__init__.py +0 -0
  27. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/bin/superannotate.py +0 -0
  28. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/common.py +0 -0
  29. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/exceptions.py +0 -0
  30. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/helpers.py +0 -0
  31. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/__init__.py +0 -0
  32. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/conversion.py +0 -0
  33. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/__init__.py +0 -0
  34. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/baseStrategy.py +0 -0
  35. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/__init__.py +0 -0
  36. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_api.py +0 -0
  37. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_converter.py +0 -0
  38. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_strategies.py +0 -0
  39. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_to_sa_pixel.py +0 -0
  40. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_to_sa_vector.py +0 -0
  41. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/sa_pixel_to_coco.py +0 -0
  42. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/coco_converters/sa_vector_to_coco.py +0 -0
  43. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/converters.py +0 -0
  44. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/__init__.py +0 -0
  45. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/dataloop_helper.py +0 -0
  46. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/dataloop_strategies.py +0 -0
  47. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/dataloop_to_sa_vector.py +0 -0
  48. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/googlecloud_converters/__init__.py +0 -0
  49. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/googlecloud_converters/googlecloud_strategies.py +0 -0
  50. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/googlecloud_converters/googlecloud_to_sa_vector.py +0 -0
  51. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/__init__.py +0 -0
  52. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_helper.py +0 -0
  53. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_strategies.py +0 -0
  54. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_to_sa_pixel.py +0 -0
  55. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_to_sa_vector.py +0 -0
  56. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/sa_json_helper.py +0 -0
  57. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/__init__.py +0 -0
  58. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/sagemaker_strategies.py +0 -0
  59. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/sagemaker_to_sa_pixel.py +0 -0
  60. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/sagemaker_to_sa_vector.py +0 -0
  61. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/__init__.py +0 -0
  62. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_helper.py +0 -0
  63. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_strategies.py +0 -0
  64. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_to_sa_pixel.py +0 -0
  65. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_to_sa_vector.py +0 -0
  66. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vgg_converters/__init__.py +0 -0
  67. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vgg_converters/vgg_helper.py +0 -0
  68. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vgg_converters/vgg_strategies.py +0 -0
  69. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vgg_converters/vgg_to_sa_vector.py +0 -0
  70. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/voc_converters/__init__.py +0 -0
  71. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_helper.py +0 -0
  72. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_strategies.py +0 -0
  73. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_to_sa_pixel.py +0 -0
  74. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_to_sa_vector.py +0 -0
  75. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vott_converters/__init__.py +0 -0
  76. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vott_converters/vott_strategies.py +0 -0
  77. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/vott_converters/vott_to_sa_vector.py +0 -0
  78. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/yolo_converters/__init__.py +0 -0
  79. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/yolo_converters/yolo_strategies.py +0 -0
  80. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/converters/yolo_converters/yolo_to_sa_vector.py +0 -0
  81. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/export_from_sa_conversions.py +0 -0
  82. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/import_to_sa_conversions.py +0 -0
  83. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/input_converters/sa_conversion.py +0 -0
  84. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/__init__.py +0 -0
  85. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/base_interface.py +0 -0
  86. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/cli_interface.py +0 -0
  87. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/sdk/__init__.py +0 -0
  88. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/sdk/folders.py +0 -0
  89. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/sdk/project.py +0 -0
  90. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/interface/types.py +0 -0
  91. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/app/serializers.py +0 -0
  92. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/__init__.py +0 -0
  93. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/base_usecases.py +0 -0
  94. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/conditions.py +0 -0
  95. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/config.py +0 -0
  96. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/__init__.py +0 -0
  97. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/base.py +0 -0
  98. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/classes.py +0 -0
  99. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/folder.py +0 -0
  100. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/integrations.py +0 -0
  101. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/items.py +0 -0
  102. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/entities/project_entities.py +0 -0
  103. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/enums.py +0 -0
  104. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/exceptions.py +0 -0
  105. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/plugin.py +0 -0
  106. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/pydantic_v1.py +0 -0
  107. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/reporter.py +0 -0
  108. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/repositories.py +0 -0
  109. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/response.py +0 -0
  110. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/service_types.py +0 -0
  111. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/types.py +0 -0
  112. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/__init__.py +0 -0
  113. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/base.py +0 -0
  114. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/classes.py +0 -0
  115. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/custom_fields.py +0 -0
  116. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/folders.py +0 -0
  117. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/integrations.py +0 -0
  118. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/items.py +0 -0
  119. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/models.py +0 -0
  120. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/usecases/projects.py +0 -0
  121. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/core/video_convertor.py +0 -0
  122. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/__init__.py +0 -0
  123. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/helpers.py +0 -0
  124. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/repositories.py +0 -0
  125. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/serviceprovider.py +0 -0
  126. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/__init__.py +0 -0
  127. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/annotation_class.py +0 -0
  128. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/custom_field.py +0 -0
  129. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/folder.py +0 -0
  130. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/http_client.py +0 -0
  131. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/integration.py +0 -0
  132. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/models.py +0 -0
  133. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/project.py +0 -0
  134. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/services/subset.py +0 -0
  135. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/utils.py +0 -0
  136. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate/lib/infrastructure/validators.py +0 -0
  137. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate.egg-info/dependency_links.txt +0 -0
  138. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate.egg-info/entry_points.txt +0 -0
  139. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate.egg-info/requires.txt +0 -0
  140. {superannotate-4.4.19b2 → superannotate-4.4.20.dev1}/src/superannotate.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: superannotate
3
- Version: 4.4.19b2
3
+ Version: 4.4.20.dev1
4
4
  Summary: Python SDK to SuperAnnotate platform
5
5
  Home-page: https://github.com/superannotateai/superannotate-python-sdk
6
6
  Author: SuperAnnotate AI
@@ -3,7 +3,7 @@ import os
3
3
  import sys
4
4
 
5
5
 
6
- __version__ = "4.4.19b2"
6
+ __version__ = "4.4.20dev1"
7
7
 
8
8
  sys.path.append(os.path.split(os.path.realpath(__file__))[0])
9
9
 
@@ -402,17 +402,23 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
402
402
 
403
403
  :param project_name: new project's name
404
404
  :type project_name: str
405
+
405
406
  :param from_project: the name of the project being used for duplication
406
407
  :type from_project: str
408
+
407
409
  :param project_description: the new project's description. If None, from_project's
408
410
  description will be used
409
411
  :type project_description: str
412
+
410
413
  :param copy_annotation_classes: enables copying annotation classes
411
414
  :type copy_annotation_classes: bool
415
+
412
416
  :param copy_settings: enables copying project settings
413
417
  :type copy_settings: bool
418
+
414
419
  :param copy_workflow: enables copying project workflow
415
420
  :type copy_workflow: bool
421
+
416
422
  :param copy_contributors: enables copying project contributors
417
423
  :type copy_contributors: bool
418
424
 
@@ -493,6 +499,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
493
499
 
494
500
  :param project: project name
495
501
  :type project: str
502
+
496
503
  :param folder_name: the new folder's name
497
504
  :type folder_name: str
498
505
 
@@ -515,7 +522,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
515
522
  def delete_project(self, project: Union[NotEmptyStr, dict]):
516
523
  """Deletes the project
517
524
 
518
- :param project: project name or folder path (e.g., "project1/folder1")
525
+ :param project: project name
519
526
  :type project: str
520
527
  """
521
528
  name = project
@@ -526,8 +533,9 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
526
533
  def rename_project(self, project: NotEmptyStr, new_name: NotEmptyStr):
527
534
  """Renames the project
528
535
 
529
- :param project: project name or folder path (e.g., "project1/folder1")
536
+ :param project: project name
530
537
  :type project: str
538
+
531
539
  :param new_name: project's new name
532
540
  :type new_name: str
533
541
  """
@@ -547,6 +555,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
547
555
 
548
556
  :param project: project name
549
557
  :type project: str
558
+
550
559
  :param folder_name: folder's name
551
560
  :type folder_name: str
552
561
 
@@ -563,6 +572,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
563
572
 
564
573
  :param project: project name
565
574
  :type project: str
575
+
566
576
  :param folder_names: to be deleted folders' names
567
577
  :type folder_names: list of strs
568
578
  """
@@ -593,14 +603,21 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
593
603
  :param folder_name: the new folder's name
594
604
  :type folder_name: str. If None, all the folders in the project will be returned.
595
605
 
596
- :param status: search folders via status. If None, all folders will be returned. Available statuses are:
597
- :type status:
606
+ :param status: search folders via status. If None, all folders will be returned. \n
607
+ Available statuses are::
608
+
609
+ * NotStarted
610
+ * InProgress
611
+ * Completed
612
+ * OnHold
613
+ :type status: str or list of str
598
614
 
599
615
  :param return_metadata: return metadata of folders instead of names
600
616
  :type return_metadata: bool
601
617
 
602
618
  :return: folder names or metadatas
603
619
  :rtype: list of strs or dicts
620
+
604
621
  """
605
622
 
606
623
  project = self.controller.get_project(project)
@@ -640,15 +657,19 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
640
657
 
641
658
  :param project: project name
642
659
  :type project: str
660
+
643
661
  :param include_annotation_classes: enables project annotation classes output under
644
662
  the key "annotation_classes"
645
663
  :type include_annotation_classes: bool
664
+
646
665
  :param include_settings: enables project settings output under
647
666
  the key "settings"
648
667
  :type include_settings: bool
668
+
649
669
  :param include_workflow: enables project workflow output under
650
670
  the key "workflow"
651
671
  :type include_workflow: bool
672
+
652
673
  :param include_contributors: enables project contributors output under
653
674
  the key "contributors"
654
675
  :type include_contributors: bool
@@ -743,11 +764,17 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
743
764
 
744
765
  :param project: project name
745
766
  :type project: str
746
- :param status: status to set, should be one of. \n
747
- “NotStarted” \n
748
- ♦ “InProgress” \n
749
- “Completed” \n
750
- ♦ “OnHold” \n
767
+
768
+ :param status: status to set.
769
+
770
+ Available statuses are::
771
+
772
+ * NotStarted
773
+ * InProgress
774
+ * Returned
775
+ * Completed
776
+ * OnHold
777
+
751
778
  :type status: str
752
779
  """
753
780
  project = self.controller.get_project(name=project)
@@ -764,13 +791,17 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
764
791
 
765
792
  :param project: project name
766
793
  :type project: str
794
+
767
795
  :param folder: folder name
768
796
  :type folder: str
769
- :param status: status to set, should be one of. \n
770
- “NotStarted” \n
771
- “InProgress” \n
772
- ♦ “Completed” \n
773
- “OnHold” \n
797
+
798
+ :param status: status to set. \n
799
+ Available statuses are::
800
+
801
+ * NotStarted
802
+ * InProgress
803
+ * Completed
804
+ * OnHold
774
805
  :type status: str
775
806
  """
776
807
  project, folder = self.controller.get_project_folder(
@@ -1084,8 +1115,10 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1084
1115
 
1085
1116
  :param project: project name or folder path (e.g., "project1/folder1")
1086
1117
  :type project: str
1118
+
1087
1119
  :param image_name: image name
1088
1120
  :type image_name: str
1121
+
1089
1122
  :param local_dir_path: local directory path to download to
1090
1123
  :type local_dir_path: Path-like (str or Path)
1091
1124
 
@@ -1111,6 +1144,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1111
1144
 
1112
1145
  :param project: project name
1113
1146
  :type project: str
1147
+
1114
1148
  :param return_metadata: return metadata of images instead of names
1115
1149
  :type return_metadata: bool
1116
1150
 
@@ -1136,16 +1170,21 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1136
1170
 
1137
1171
  :param project: project name
1138
1172
  :type project: str
1173
+
1139
1174
  :param folder_names: names of folders to include in the export. If None, whole project will be exported
1140
1175
  :type folder_names: list of str
1176
+
1141
1177
  :param annotation_statuses: images with which status to include, if None,
1142
- ["NotStarted", "InProgress", "QualityCheck", "Returned", "Completed", "Skipped"] will be chose
1178
+ ["NotStarted", "InProgress", "QualityCheck", "Returned", "Completed", "Skipped"] will be chosen
1143
1179
  list elements should be one of NotStarted InProgress QualityCheck Returned Completed Skipped
1144
1180
  :type annotation_statuses: list of strs
1181
+
1145
1182
  :param include_fuse: enables fuse images in the export
1146
1183
  :type include_fuse: bool
1184
+
1147
1185
  :param only_pinned: enable only pinned output in export. This option disables all other types of output.
1148
1186
  :type only_pinned: bool
1187
+
1149
1188
  :param kwargs: Arbitrary kwarg ``integration_name``
1150
1189
  can be provided which will be used as a storage to store export file
1151
1190
 
@@ -1207,26 +1246,36 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1207
1246
 
1208
1247
  :param project: project name or folder path (e.g., "project1/folder1")
1209
1248
  :type project: str
1249
+
1210
1250
  :param folder_path: from which folder to upload the videos
1211
1251
  :type folder_path: Path-like (str or Path)
1252
+
1212
1253
  :param extensions: tuple or list of filename extensions to include from folder
1213
1254
  :type extensions: tuple or list of strs
1255
+
1214
1256
  :param exclude_file_patterns: filename patterns to exclude from uploading
1215
1257
  :type exclude_file_patterns: listlike of strs
1258
+
1216
1259
  :param recursive_subfolders: enable recursive subfolder parsing
1217
1260
  :type recursive_subfolders: bool
1261
+
1218
1262
  :param target_fps: how many frames per second need to extract from the video (approximate).
1219
1263
  If None, all frames will be uploaded
1220
1264
  :type target_fps: float
1265
+
1221
1266
  :param start_time: Time (in seconds) from which to start extracting frames
1222
1267
  :type start_time: float
1268
+
1223
1269
  :param end_time: Time (in seconds) up to which to extract frames. If None up to end
1224
1270
  :type end_time: float
1271
+
1225
1272
  :param annotation_status: value to set the annotation statuses of the uploaded images
1226
1273
  NotStarted InProgress QualityCheck Returned Completed Skipped
1227
1274
  :type annotation_status: str
1275
+
1228
1276
  :param image_quality_in_editor: image quality be seen in SuperAnnotate web annotation editor.
1229
- Can be either "compressed" or "original". If None then the default value in project settings will be used.
1277
+ Can be either "compressed" or "original".
1278
+ If None then the default value in project settings will be used.
1230
1279
  :type image_quality_in_editor: str
1231
1280
 
1232
1281
  :return: uploaded and not-uploaded video frame images' filenames
@@ -1285,18 +1334,24 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1285
1334
 
1286
1335
  :param project: project name or folder path (e.g., "project1/folder1")
1287
1336
  :type project: str
1337
+
1288
1338
  :param video_path: video to upload
1289
1339
  :type video_path: Path-like (str or Path)
1340
+
1290
1341
  :param target_fps: how many frames per second need to extract from the video (approximate).
1291
1342
  If None, all frames will be uploaded
1292
1343
  :type target_fps: float
1344
+
1293
1345
  :param start_time: Time (in seconds) from which to start extracting frames
1294
1346
  :type start_time: float
1347
+
1295
1348
  :param end_time: Time (in seconds) up to which to extract frames. If None up to end
1296
1349
  :type end_time: float
1350
+
1297
1351
  :param annotation_status: value to set the annotation statuses of the uploaded
1298
1352
  video frames NotStarted InProgress QualityCheck Returned Completed Skipped
1299
1353
  :type annotation_status: str
1354
+
1300
1355
  :param image_quality_in_editor: image quality be seen in SuperAnnotate web annotation editor.
1301
1356
  Can be either "compressed" or "original".
1302
1357
  If None then the default value in project settings will be used.
@@ -1342,11 +1397,20 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1342
1397
  :type color: str
1343
1398
 
1344
1399
  :param attribute_groups: list of attribute group dicts.
1345
- The values for the "group_type" key are "radio"|"checklist"|"text"|"numeric"|"ocr".
1346
- "ocr "group_type" key is only available for Vector projects.
1347
- Mandatory keys for each attribute group are
1400
+ The values for the "group_type" key are
1401
+ ::
1402
+
1403
+ * radio
1404
+ * checklist
1405
+ * checklist
1406
+ * text
1407
+ * numeric
1408
+ * ocr
1409
+
1410
+ `ocr` and `group_type` keys are only available for Vector projects.
1411
+ Mandatory keys for each attribute group are::
1348
1412
 
1349
- - "name"
1413
+ - "name"
1350
1414
  :type attribute_groups: list of dicts
1351
1415
 
1352
1416
  :param class_type: class type. Should be either "object" or "tag". Document project type can also have "relationship" type of classes.
@@ -1444,6 +1508,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1444
1508
 
1445
1509
  :param project: project name
1446
1510
  :type project: str
1511
+
1447
1512
  :param annotation_class: annotation class name or metadata
1448
1513
  :type annotation_class: str or dict
1449
1514
  """
@@ -1471,6 +1536,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1471
1536
 
1472
1537
  :param project: project name
1473
1538
  :type project: str
1539
+
1474
1540
  :param folder: folder to download to
1475
1541
  :type folder: Path-like (str or Path)
1476
1542
 
@@ -1497,8 +1563,10 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1497
1563
 
1498
1564
  :param project: project name
1499
1565
  :type project: str
1566
+
1500
1567
  :param classes_json: JSON itself or path to the JSON file
1501
1568
  :type classes_json: list or Path-like (str or Path)
1569
+
1502
1570
  :param from_s3_bucket: AWS S3 bucket to use. If None then classes_json is in local filesystem
1503
1571
  :type from_s3_bucket: str
1504
1572
 
@@ -1542,13 +1610,17 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1542
1610
 
1543
1611
  :param project: project name
1544
1612
  :type project: str
1613
+
1545
1614
  :param export: export name
1546
- :type export: str, dict
1615
+ :type export: str or dict
1616
+
1547
1617
  :param folder_path: where to download the export
1548
1618
  :type folder_path: Path-like (str or Path)
1619
+
1549
1620
  :param extract_zip_contents: if False then a zip file will be downloaded,
1550
1621
  if True the zip file will be extracted at folder_path
1551
1622
  :type extract_zip_contents: bool
1623
+
1552
1624
  :param to_s3_bucket: AWS S3 bucket to use for download. If None then folder_path is in local filesystem.
1553
1625
  :type to_s3_bucket: Bucket object
1554
1626
  """
@@ -1572,11 +1644,11 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1572
1644
 
1573
1645
  new_workflow example: [{ "step" : <step_num>, "className" : <annotation_class>, "tool" : <tool_num>,
1574
1646
  "attribute":[{"attribute" : {"name" : <attribute_value>, "attribute_group" : {"name": <attribute_group>}}},
1575
- ...]
1576
- },...]
1647
+ ...]},...]
1577
1648
 
1578
1649
  :param project: project name or metadata
1579
1650
  :type project: str or dict
1651
+
1580
1652
  :param new_workflow: new workflow list of dicts
1581
1653
  :type new_workflow: list of dicts
1582
1654
  """
@@ -1600,16 +1672,22 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1600
1672
 
1601
1673
  :param project: project name or folder path (e.g., "project1/folder1")
1602
1674
  :type project: str
1675
+
1603
1676
  :param image_name: image name
1604
1677
  :type image_name: str
1678
+
1605
1679
  :param local_dir_path: where to download the image
1606
1680
  :type local_dir_path: Path-like (str or Path)
1681
+
1607
1682
  :param include_annotations: enables annotation download with the image
1608
1683
  :type include_annotations: bool
1684
+
1609
1685
  :param include_fuse: enables fuse image download with the image
1610
1686
  :type include_fuse: bool
1687
+
1611
1688
  :param include_overlay: enables overlay image download with the image
1612
1689
  :type include_overlay: bool
1690
+
1613
1691
  :param variant: which resolution to download, can be 'original' or 'lores'
1614
1692
  (low resolution used in web editor)
1615
1693
  :type variant: str
@@ -1828,8 +1906,10 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1828
1906
 
1829
1907
  :param model: the model that needs to be downloaded
1830
1908
  :type model: dict
1909
+
1831
1910
  :param output_dir: the directory in which the files will be saved
1832
1911
  :type output_dir: str
1912
+
1833
1913
  :return: the metadata of the model
1834
1914
  :rtype: dict
1835
1915
  """
@@ -1891,10 +1971,13 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1891
1971
 
1892
1972
  :param project: the project in which the target images are uploaded.
1893
1973
  :type project: str or dict
1974
+
1894
1975
  :param images_list: the list of image names on which smart prediction has to be run
1895
1976
  :type images_list: list of str
1977
+
1896
1978
  :param model: the name of the model that should be used for running smart prediction
1897
1979
  :type model: str or dict
1980
+
1898
1981
  :return: tuple of two lists, list of images on which the prediction has succeeded and failed respectively
1899
1982
  :rtype: tuple
1900
1983
  """
@@ -1933,16 +2016,21 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
1933
2016
 
1934
2017
  :param project: project name or folder path (e.g., "project1/folder1")
1935
2018
  :type project: str
2019
+
1936
2020
  :param img: image to upload
1937
2021
  :type img: io.BytesIO() or Path-like (str or Path)
2022
+
1938
2023
  :param image_name: image name to set on platform. If None and img is filepath,
1939
2024
  image name will be set to filename of the path
1940
2025
  :type image_name: str
2026
+
1941
2027
  :param annotation_status: value to set the annotation statuses of the uploaded image
1942
2028
  NotStarted InProgress QualityCheck Returned Completed Skipped
1943
2029
  :type annotation_status: str
2030
+
1944
2031
  :param from_s3_bucket: AWS S3 bucket to use. If None then folder_path is in local filesystem
1945
2032
  :type from_s3_bucket: str
2033
+
1946
2034
  :param image_quality_in_editor: image quality be seen in SuperAnnotate web annotation editor.
1947
2035
  Can be either "compressed" or "original".
1948
2036
  If None then the default value in project settings will be used.
@@ -2022,13 +2110,24 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2022
2110
 
2023
2111
  :param project: project name or folder path (e.g., "project1/folder1")
2024
2112
  :type project: str
2113
+
2025
2114
  :param img_paths: list of Path-like (str or Path) objects to upload
2026
2115
  :type img_paths: list
2116
+
2027
2117
  :param annotation_status: value to set the annotation statuses of the uploaded images
2028
- NotStarted InProgress QualityCheck Returned Completed Skipped
2118
+ Available statuses are::
2119
+
2120
+ * NotStarted
2121
+ * InProgress
2122
+ * QualityCheck
2123
+ * Returned
2124
+ * Completed
2125
+ * Skipped
2029
2126
  :type annotation_status: str
2127
+
2030
2128
  :param from_s3_bucket: AWS S3 bucket to use. If None then folder_path is in local filesystem
2031
2129
  :type from_s3_bucket: str
2130
+
2032
2131
  :param image_quality_in_editor: image quality be seen in SuperAnnotate web annotation editor.
2033
2132
  Can be either "compressed" or "original".
2034
2133
  If None then the default value in project settings will be used.
@@ -2048,26 +2147,21 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2048
2147
  from_s3_bucket=from_s3_bucket,
2049
2148
  )
2050
2149
 
2051
- images_to_upload, duplicates = use_case.images_to_upload
2052
- if len(duplicates):
2053
- logger.warning(
2054
- "%s already existing images found that won't be uploaded.",
2055
- len(duplicates),
2056
- )
2150
+ images_to_upload, existing_items = use_case.images_to_upload
2057
2151
  logger.info(f"Uploading {len(images_to_upload)} images to project {project}.")
2058
- uploaded, failed_images, duplications = [], [], duplicates
2152
+ uploaded, failed_images = [], []
2059
2153
  if not images_to_upload:
2060
- return uploaded, failed_images, duplications
2154
+ return uploaded, failed_images, existing_items
2061
2155
  if use_case.is_valid():
2062
2156
  with tqdm(
2063
2157
  total=len(images_to_upload), desc="Uploading images"
2064
2158
  ) as progress_bar:
2065
2159
  for _ in use_case.execute():
2066
2160
  progress_bar.update(1)
2067
- uploaded, failed_images, duplications = use_case.data
2068
- if duplications:
2069
- logger.info(f"Duplicated images {', '.join(duplications)}")
2070
- return uploaded, failed_images, duplications
2161
+ uploaded, failed_images, existing_items = use_case.data
2162
+ if existing_items:
2163
+ logger.info(f"Existing images {', '.join(existing_items)}")
2164
+ return uploaded, failed_images, existing_items
2071
2165
  raise AppException(use_case.response.errors)
2072
2166
 
2073
2167
  def aggregate_annotations_as_df(
@@ -2085,7 +2179,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2085
2179
  :type project_type: str
2086
2180
 
2087
2181
  :param folder_names: Aggregate the specified folders from project_root.
2088
- If None aggregate all folders in the project_root
2182
+ If None aggregates all folders in the project_root
2089
2183
  :type folder_names: list of Pathlike (str or Path) objects
2090
2184
 
2091
2185
  :return: DataFrame on annotations
@@ -2205,20 +2299,28 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2205
2299
  return response.data
2206
2300
 
2207
2301
  def get_annotations(
2208
- self, project: NotEmptyStr, items: Optional[List[NotEmptyStr]] = None
2302
+ self,
2303
+ project: Union[NotEmptyStr, int],
2304
+ items: Optional[Union[List[NotEmptyStr], List[int]]] = None,
2209
2305
  ):
2210
2306
  """Returns annotations for the given list of items.
2211
2307
 
2212
- :param project: project name or folder path (e.g., “project1/folder1”).
2213
- :type project: str
2308
+ :param project: project id or project name or folder path (e.g., “project1/folder1”).
2309
+ :type project: str or int
2214
2310
 
2215
2311
  :param items: item names. If None, all the items in the specified directory will be used.
2216
- :type items: list of strs
2312
+ :type items: list of strs or list of ints
2217
2313
 
2218
2314
  :return: list of annotations
2219
- :rtype: list of strs
2315
+ :rtype: list of dict
2220
2316
  """
2221
- project, folder = self.controller.get_project_folder_by_path(project)
2317
+ if isinstance(project, str):
2318
+ project, folder = self.controller.get_project_folder_by_path(project)
2319
+ else:
2320
+ project, folder = (
2321
+ self.controller.get_project_by_id(project_id=project).data,
2322
+ None,
2323
+ )
2222
2324
  response = self.controller.annotations.list(project, folder, items)
2223
2325
  if response.errors:
2224
2326
  raise AppException(response.errors)
@@ -2436,15 +2538,15 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2436
2538
  If None, all items returned, in accordance with the recursive=False parameter.
2437
2539
  :type name_contains: str
2438
2540
 
2439
- :param annotation_status: if not None, filters items by annotation status.
2440
- Values are:
2541
+ :param annotation_status: if not None, filters items by annotation status. \n
2542
+ Available statuses are::
2441
2543
 
2442
- NotStarted” \n
2443
- InProgress” \n
2444
- QualityCheck” \n
2445
- Returned” \n
2446
- Completed” \n
2447
- “Skip” \n
2544
+ * NotStarted
2545
+ * InProgress
2546
+ * QualityCheck
2547
+ * Returned
2548
+ * Completed
2549
+ * Skipped
2448
2550
  :type annotation_status: str
2449
2551
 
2450
2552
  :param annotator_email: returns those items’ names that are assigned to the specified annotator.
@@ -2539,13 +2641,15 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2539
2641
  :param attachments: path to CSV file or list of dicts containing attachments URLs.
2540
2642
  :type attachments: path-like (str or Path) or list of dicts
2541
2643
 
2542
- :param annotation_status: value to set the annotation statuses of the linked items
2543
- “NotStarted”
2544
- “InProgress”
2545
- “QualityCheck”
2546
- “Returned”
2547
- “Completed”
2548
- “Skipped”
2644
+ :param annotation_status: value to set the annotation statuses of the linked items. \n
2645
+ Available statuses are::
2646
+
2647
+ * NotStarted
2648
+ * InProgress
2649
+ * QualityCheck
2650
+ * Returned
2651
+ * Completed
2652
+ * Skipped
2549
2653
  :type annotation_status: str
2550
2654
 
2551
2655
  :return: uploaded, failed and duplicated item names
@@ -2553,26 +2657,27 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2553
2657
 
2554
2658
  Example:
2555
2659
  ::
2660
+
2556
2661
  client = SAClient()
2557
2662
  client.attach_items(
2558
- project = "Medical Annotations",
2559
- attachments = [{"name": "item", "url": "https://..."}]
2560
- )
2663
+ project="Medical Annotations",
2664
+ attachments=[{"name": "item", "url": "https://..."}]
2665
+ )
2561
2666
 
2562
2667
  Example of attaching items from custom integration:
2563
2668
  ::
2669
+
2564
2670
  client = SAClient()
2565
2671
  client.attach_items(
2566
- project = "Medical Annotations",
2567
- attachments = [
2672
+ project="Medical Annotations",
2673
+ attachments=[
2568
2674
  {
2569
2675
  "name": "item",
2570
- "url": "https://sa-public-files.s3.../text_file_example_1.jpeg"
2571
- "integration": "custom-integration"
2676
+ "url": "https://bucket-name.s3…/example.png"
2677
+ "integration": "custom-integration-name"
2572
2678
  }
2573
2679
  ]
2574
2680
  )
2575
-
2576
2681
  """
2577
2682
 
2578
2683
  project_name, folder_name = extract_project_folder(project)
@@ -2736,13 +2841,15 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
2736
2841
  :param project: project name or folder path (e.g., “project1/folder1”).
2737
2842
  :type project: str
2738
2843
 
2739
- :param annotation_status: annotation status to set, should be one of. \n
2740
- “NotStarted” \n
2741
- ♦ “InProgress” \n
2742
- “QualityCheck” \n
2743
- “Returned” \n
2744
- “Completed” \n
2745
- “Skipped” \n
2844
+ :param annotation_status: annotation status to set. \n
2845
+ Available statuses are::
2846
+
2847
+ * NotStarted
2848
+ * InProgress
2849
+ * QualityCheck
2850
+ * Returned
2851
+ * Completed
2852
+ * Skipped
2746
2853
  :type annotation_status: str
2747
2854
 
2748
2855
  :param items: item names. If None, all the items in the specified directory will be used.
@@ -3214,10 +3321,12 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
3214
3321
  :param project: project name or folder path (e.g., “project1/folder1”).
3215
3322
  :type project: str
3216
3323
 
3217
- :param approval_status: approval status to set, should be one of. \n
3218
- None \n
3219
- ♦ “Approved” \n
3220
- “Disapproved” \n
3324
+ :param approval_status: approval status to set. \n
3325
+ Available statuses are::
3326
+
3327
+ * None
3328
+ * Approved
3329
+ * Disapproved
3221
3330
  :type approval_status: str
3222
3331
 
3223
3332
  :param items: item names to set the mentioned status for. If None, all the items in the project will be used.
@@ -70,7 +70,7 @@ class SettingEntity(BaseModel):
70
70
  id: Optional[int]
71
71
  project_id: Optional[int]
72
72
  attribute: str
73
- value: Union[StrictStr, StrictInt, StrictFloat, StrictBool]
73
+ value: Union[StrictStr, StrictInt, StrictFloat, StrictBool] # todo set any
74
74
 
75
75
  class Config:
76
76
  extra = Extra.ignore
@@ -246,6 +246,14 @@ class BaseItemService(SuperannotateServiceProvider):
246
246
  ) -> ServiceResponse:
247
247
  raise NotImplementedError
248
248
 
249
+ @abstractmethod
250
+ def list_by_ids(
251
+ self,
252
+ project: entities.ProjectEntity,
253
+ ids: List[int],
254
+ ) -> ServiceResponse:
255
+ raise NotImplementedError
256
+
249
257
  @abstractmethod
250
258
  def attach(
251
259
  self,