superannotate 4.4.15.dev1__tar.gz → 4.4.16__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.
- {superannotate-4.4.15.dev1/src/superannotate.egg-info → superannotate-4.4.16}/PKG-INFO +5 -5
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/requirements.txt +3 -3
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/setup.py +1 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/__init__.py +1 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/base_interface.py +6 -9
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/sdk_interface.py +29 -9
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/types.py +7 -7
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/serializers.py +1 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/base.py +12 -12
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/classes.py +9 -10
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/folder.py +1 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/integrations.py +7 -2
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/items.py +2 -2
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/project.py +7 -7
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/plugin.py +2 -2
- superannotate-4.4.16/src/superannotate/lib/core/pydantic_v1.py +36 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/service_types.py +3 -3
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/serviceproviders.py +1 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/types.py +3 -3
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/annotations.py +7 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/models.py +3 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/video_convertor.py +5 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/controller.py +2 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/serviceprovider.py +3 -1
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/annotation.py +14 -15
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/http_client.py +9 -3
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/validators.py +8 -6
- {superannotate-4.4.15.dev1 → superannotate-4.4.16/src/superannotate.egg-info}/PKG-INFO +5 -5
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate.egg-info/SOURCES.txt +1 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate.egg-info/requires.txt +3 -3
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/LICENSE +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/MANIFEST.in +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/README.rst +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/setup.cfg +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/analytics/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/analytics/aggregators.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/analytics/common.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/bin/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/bin/superannotate.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/common.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/exceptions.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/helpers.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/conversion.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/baseStrategy.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_api.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_converter.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_to_sa_pixel.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/coco_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/sa_pixel_to_coco.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/coco_converters/sa_vector_to_coco.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/converters.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/dataloop_helper.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/dataloop_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/dataloop_converters/dataloop_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/googlecloud_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/googlecloud_converters/googlecloud_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/googlecloud_converters/googlecloud_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_helper.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_to_sa_pixel.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/labelbox_converters/labelbox_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/sa_json_helper.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/sagemaker_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/sagemaker_to_sa_pixel.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/sagemaker_converters/sagemaker_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_helper.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_to_sa_pixel.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/supervisely_converters/supervisely_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vgg_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vgg_converters/vgg_helper.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vgg_converters/vgg_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vgg_converters/vgg_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/voc_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_helper.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_to_sa_pixel.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/voc_converters/voc_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vott_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vott_converters/vott_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/vott_converters/vott_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/yolo_converters/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/yolo_converters/yolo_strategies.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/converters/yolo_converters/yolo_to_sa_vector.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/export_from_sa_conversions.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/import_to_sa_conversions.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/input_converters/sa_conversion.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/cli_interface.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/sdk/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/sdk/folders.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/sdk/project.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/base_usecases.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/conditions.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/config.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/project_entities.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/enums.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/exceptions.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/reporter.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/repositories.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/response.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/base.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/classes.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/custom_fields.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/folders.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/images.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/integrations.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/items.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/projects.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/helpers.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/repositories.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/__init__.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/annotation_class.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/custom_field.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/folder.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/integration.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/item.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/models.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/project.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/services/subset.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/stream_data_handler.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/infrastructure/utils.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/logger.py +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate.egg-info/dependency_links.txt +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate.egg-info/entry_points.txt +0 -0
- {superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate.egg-info/top_level.txt +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: superannotate
|
|
3
|
-
Version: 4.4.
|
|
3
|
+
Version: 4.4.16
|
|
4
4
|
Summary: Python SDK to SuperAnnotate platform
|
|
5
5
|
Home-page: https://github.com/superannotateai/superannotate-python-sdk
|
|
6
6
|
Author: SuperAnnotate AI
|
|
7
|
-
Author-email:
|
|
7
|
+
Author-email: support@superannotate.com
|
|
8
8
|
License: MIT
|
|
9
9
|
Project-URL: Documentation, https://superannotate.readthedocs.io/en/stable/
|
|
10
10
|
Classifier: Programming Language :: Python
|
|
@@ -17,16 +17,16 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
17
17
|
Requires-Python: >=3.7
|
|
18
18
|
Description-Content-Type: text/x-rst
|
|
19
19
|
License-File: LICENSE
|
|
20
|
-
Requires-Dist: pydantic
|
|
20
|
+
Requires-Dist: pydantic!=2.0.*,>=1.10
|
|
21
21
|
Requires-Dist: aiohttp~=3.8
|
|
22
22
|
Requires-Dist: boto3~=1.26
|
|
23
|
-
Requires-Dist: opencv-python~=4.7
|
|
23
|
+
Requires-Dist: opencv-python-headless~=4.7
|
|
24
24
|
Requires-Dist: packaging~=23.1
|
|
25
25
|
Requires-Dist: plotly~=5.14
|
|
26
26
|
Requires-Dist: email-validator~=2.0
|
|
27
27
|
Requires-Dist: pandas~=1.3
|
|
28
28
|
Requires-Dist: ffmpeg-python~=0.2
|
|
29
|
-
Requires-Dist: pillow
|
|
29
|
+
Requires-Dist: pillow>=9.5,~=10.0
|
|
30
30
|
Requires-Dist: tqdm~=4.66.1
|
|
31
31
|
Requires-Dist: requests~=2.31.0
|
|
32
32
|
Requires-Dist: aiofiles==23.1.0
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
pydantic
|
|
1
|
+
pydantic>=1.10,!=2.0.*
|
|
2
2
|
aiohttp~=3.8
|
|
3
3
|
boto3~=1.26
|
|
4
|
-
opencv-python~=4.7
|
|
4
|
+
opencv-python-headless~=4.7
|
|
5
5
|
packaging~=23.1
|
|
6
6
|
plotly~=5.14
|
|
7
7
|
email-validator~=2.0
|
|
8
8
|
pandas~=1.3
|
|
9
9
|
ffmpeg-python~=0.2
|
|
10
|
-
pillow
|
|
10
|
+
pillow>=9.5,~=10.0
|
|
11
11
|
tqdm~=4.66.1
|
|
12
12
|
requests~=2.31.0
|
|
13
13
|
aiofiles==23.1.0
|
|
@@ -36,7 +36,7 @@ setup(
|
|
|
36
36
|
description="Python SDK to SuperAnnotate platform",
|
|
37
37
|
license="MIT",
|
|
38
38
|
author="SuperAnnotate AI",
|
|
39
|
-
author_email="
|
|
39
|
+
author_email="support@superannotate.com",
|
|
40
40
|
url="https://github.com/superannotateai/superannotate-python-sdk",
|
|
41
41
|
long_description=open("README.rst").read(),
|
|
42
42
|
long_description_content_type="text/x-rst",
|
|
@@ -11,13 +11,14 @@ from typing import Iterable
|
|
|
11
11
|
from typing import Sized
|
|
12
12
|
|
|
13
13
|
import lib.core as constants
|
|
14
|
-
import pydantic
|
|
15
14
|
from lib.app.interface.types import validate_arguments
|
|
16
15
|
from lib.core import CONFIG
|
|
17
16
|
from lib.core import setup_logging
|
|
18
17
|
from lib.core.entities.base import ConfigEntity
|
|
19
18
|
from lib.core.entities.base import TokenStr
|
|
20
19
|
from lib.core.exceptions import AppException
|
|
20
|
+
from lib.core.pydantic_v1 import ErrorWrapper
|
|
21
|
+
from lib.core.pydantic_v1 import ValidationError
|
|
21
22
|
from lib.infrastructure.controller import Controller
|
|
22
23
|
from lib.infrastructure.utils import extract_project_folder
|
|
23
24
|
from lib.infrastructure.validators import wrap_error
|
|
@@ -61,7 +62,7 @@ class BaseInterfaceFacade:
|
|
|
61
62
|
raise AppException(
|
|
62
63
|
f"SuperAnnotate config file {constants.CONFIG_INI_FILE_LOCATION} not found."
|
|
63
64
|
)
|
|
64
|
-
except
|
|
65
|
+
except ValidationError as e:
|
|
65
66
|
raise AppException(wrap_error(e))
|
|
66
67
|
except KeyError:
|
|
67
68
|
raise
|
|
@@ -78,13 +79,9 @@ class BaseInterfaceFacade:
|
|
|
78
79
|
token = json_data["token"]
|
|
79
80
|
try:
|
|
80
81
|
config = ConfigEntity(SA_TOKEN=token)
|
|
81
|
-
except
|
|
82
|
-
raise
|
|
83
|
-
[
|
|
84
|
-
pydantic.error_wrappers.ErrorWrapper(
|
|
85
|
-
ValueError("Invalid token."), loc="token"
|
|
86
|
-
)
|
|
87
|
-
],
|
|
82
|
+
except ValidationError:
|
|
83
|
+
raise ValidationError(
|
|
84
|
+
[ErrorWrapper(ValueError("Invalid token."), loc="token")],
|
|
88
85
|
model=ConfigEntity,
|
|
89
86
|
)
|
|
90
87
|
host = json_data.get("main_endpoint")
|
|
@@ -15,7 +15,6 @@ from typing import Tuple
|
|
|
15
15
|
from typing import TypeVar
|
|
16
16
|
from typing import Union
|
|
17
17
|
|
|
18
|
-
import pydantic
|
|
19
18
|
from typing_extensions import Literal
|
|
20
19
|
|
|
21
20
|
if sys.version_info < (3, 11):
|
|
@@ -24,10 +23,7 @@ else:
|
|
|
24
23
|
from typing import TypedDict, NotRequired, Required # noqa
|
|
25
24
|
|
|
26
25
|
import boto3
|
|
27
|
-
|
|
28
|
-
from pydantic import constr
|
|
29
|
-
from pydantic import parse_obj_as
|
|
30
|
-
from pydantic.error_wrappers import ValidationError
|
|
26
|
+
|
|
31
27
|
from tqdm import tqdm
|
|
32
28
|
|
|
33
29
|
import lib.core as constants
|
|
@@ -61,16 +57,18 @@ from lib.core.exceptions import AppException
|
|
|
61
57
|
from lib.core.types import MLModel
|
|
62
58
|
from lib.core.types import PriorityScoreEntity
|
|
63
59
|
from lib.core.types import Project
|
|
60
|
+
from lib.core.pydantic_v1 import ValidationError
|
|
61
|
+
from lib.core.pydantic_v1 import constr
|
|
62
|
+
from lib.core.pydantic_v1 import conlist
|
|
63
|
+
from lib.core.pydantic_v1 import parse_obj_as
|
|
64
64
|
from lib.infrastructure.utils import extract_project_folder
|
|
65
65
|
from lib.infrastructure.validators import wrap_error
|
|
66
66
|
|
|
67
67
|
|
|
68
68
|
logger = logging.getLogger("sa")
|
|
69
69
|
|
|
70
|
-
|
|
71
70
|
NotEmptyStr = TypeVar("NotEmptyStr", bound=constr(strict=True, min_length=1))
|
|
72
71
|
|
|
73
|
-
|
|
74
72
|
PROJECT_STATUS = Literal["NotStarted", "InProgress", "Completed", "OnHold"]
|
|
75
73
|
|
|
76
74
|
PROJECT_TYPE = Literal[
|
|
@@ -1131,6 +1129,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
|
|
|
1131
1129
|
annotation_statuses: Optional[List[ANNOTATION_STATUS]] = None,
|
|
1132
1130
|
include_fuse: Optional[bool] = False,
|
|
1133
1131
|
only_pinned=False,
|
|
1132
|
+
**kwargs,
|
|
1134
1133
|
):
|
|
1135
1134
|
"""Prepare annotations and classes.json for export. Original and fused images for images with
|
|
1136
1135
|
annotations can be included with include_fuse flag.
|
|
@@ -1147,6 +1146,8 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
|
|
|
1147
1146
|
:type include_fuse: bool
|
|
1148
1147
|
:param only_pinned: enable only pinned output in export. This option disables all other types of output.
|
|
1149
1148
|
:type only_pinned: bool
|
|
1149
|
+
:param kwargs: Arbitrary kwarg ``integration_name``
|
|
1150
|
+
can be provided which will be used as a storage to store export file
|
|
1150
1151
|
|
|
1151
1152
|
:return: metadata object of the prepared export
|
|
1152
1153
|
:rtype: dict
|
|
@@ -1165,12 +1166,22 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
|
|
|
1165
1166
|
constants.AnnotationStatus.COMPLETED.name,
|
|
1166
1167
|
constants.AnnotationStatus.SKIPPED.name,
|
|
1167
1168
|
]
|
|
1169
|
+
integration_name = kwargs.get("integration_name")
|
|
1170
|
+
integration_id = None
|
|
1171
|
+
if integration_name:
|
|
1172
|
+
for integration in self.controller.integrations.list().data:
|
|
1173
|
+
if integration.name == integration_name:
|
|
1174
|
+
integration_id = integration.id
|
|
1175
|
+
break
|
|
1176
|
+
else:
|
|
1177
|
+
raise AppException("Integration not found.")
|
|
1168
1178
|
response = self.controller.prepare_export(
|
|
1169
1179
|
project_name=project_name,
|
|
1170
1180
|
folder_names=folders,
|
|
1171
1181
|
include_fuse=include_fuse,
|
|
1172
1182
|
only_pinned=only_pinned,
|
|
1173
1183
|
annotation_statuses=annotation_statuses,
|
|
1184
|
+
integration_id=integration_id,
|
|
1174
1185
|
)
|
|
1175
1186
|
if response.errors:
|
|
1176
1187
|
raise AppException(response.errors)
|
|
@@ -2095,7 +2106,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
|
|
|
2095
2106
|
|
|
2096
2107
|
:param project: project name or folder path (e.g., "project1/folder1")
|
|
2097
2108
|
:type project: str
|
|
2098
|
-
:param item_names: item names. If None, all the
|
|
2109
|
+
:param item_names: item names. If None, all the annotations in the specified directory will be deleted.
|
|
2099
2110
|
:type item_names: list of strs
|
|
2100
2111
|
"""
|
|
2101
2112
|
|
|
@@ -2538,6 +2549,15 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
|
|
|
2538
2549
|
|
|
2539
2550
|
:return: uploaded, failed and duplicated item names
|
|
2540
2551
|
:rtype: tuple of list of strs
|
|
2552
|
+
|
|
2553
|
+
Example:
|
|
2554
|
+
::
|
|
2555
|
+
client = SAClient()
|
|
2556
|
+
client.attach_items(
|
|
2557
|
+
project = "Medical Annotations",
|
|
2558
|
+
attachments = [{"name": "item", "url": "https://..."}]
|
|
2559
|
+
)
|
|
2560
|
+
|
|
2541
2561
|
"""
|
|
2542
2562
|
|
|
2543
2563
|
project_name, folder_name = extract_project_folder(project)
|
|
@@ -2549,7 +2569,7 @@ class SAClient(BaseInterfaceFacade, metaclass=TrackableMeta):
|
|
|
2549
2569
|
for item, count in collections.Counter(attachments).items()
|
|
2550
2570
|
if count > 1
|
|
2551
2571
|
]
|
|
2552
|
-
except
|
|
2572
|
+
except ValidationError:
|
|
2553
2573
|
(
|
|
2554
2574
|
unique_attachments,
|
|
2555
2575
|
duplicate_attachments,
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/app/interface/types.py
RENAMED
|
@@ -3,14 +3,14 @@ from typing import Union
|
|
|
3
3
|
|
|
4
4
|
from lib.core.enums import BaseTitledEnum
|
|
5
5
|
from lib.core.exceptions import AppException
|
|
6
|
+
from lib.core.pydantic_v1 import constr
|
|
7
|
+
from lib.core.pydantic_v1 import errors
|
|
8
|
+
from lib.core.pydantic_v1 import pydantic_validate_arguments
|
|
9
|
+
from lib.core.pydantic_v1 import PydanticTypeError
|
|
10
|
+
from lib.core.pydantic_v1 import StrictStr
|
|
11
|
+
from lib.core.pydantic_v1 import StrRegexError
|
|
12
|
+
from lib.core.pydantic_v1 import ValidationError
|
|
6
13
|
from lib.infrastructure.validators import wrap_error
|
|
7
|
-
from pydantic import constr
|
|
8
|
-
from pydantic import errors
|
|
9
|
-
from pydantic import StrictStr
|
|
10
|
-
from pydantic import validate_arguments as pydantic_validate_arguments
|
|
11
|
-
from pydantic import ValidationError
|
|
12
|
-
from pydantic.errors import PydanticTypeError
|
|
13
|
-
from pydantic.errors import StrRegexError
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class EnumMemberError(PydanticTypeError):
|
|
@@ -5,8 +5,8 @@ from typing import Set
|
|
|
5
5
|
from typing import Union
|
|
6
6
|
|
|
7
7
|
import superannotate.lib.core as constance
|
|
8
|
-
from pydantic import BaseModel
|
|
9
8
|
from superannotate.lib.core.entities import BaseEntity
|
|
9
|
+
from superannotate.lib.core.pydantic_v1 import BaseModel
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class BaseSerializer(ABC):
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/base.py
RENAMED
|
@@ -13,16 +13,16 @@ from lib.core import BACKEND_URL
|
|
|
13
13
|
from lib.core import LOG_FILE_LOCATION
|
|
14
14
|
from lib.core.enums import AnnotationStatus
|
|
15
15
|
from lib.core.enums import BaseTitledEnum
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
20
|
-
from
|
|
21
|
-
from
|
|
22
|
-
from
|
|
23
|
-
from
|
|
24
|
-
from
|
|
25
|
-
from
|
|
16
|
+
from lib.core.pydantic_v1 import BaseModel
|
|
17
|
+
from lib.core.pydantic_v1 import Extra
|
|
18
|
+
from lib.core.pydantic_v1 import Field
|
|
19
|
+
from lib.core.pydantic_v1 import is_namedtuple
|
|
20
|
+
from lib.core.pydantic_v1 import Literal
|
|
21
|
+
from lib.core.pydantic_v1 import parse_datetime
|
|
22
|
+
from lib.core.pydantic_v1 import ROOT_KEY
|
|
23
|
+
from lib.core.pydantic_v1 import sequence_like
|
|
24
|
+
from lib.core.pydantic_v1 import StrictStr
|
|
25
|
+
from lib.core.pydantic_v1 import ValueItems
|
|
26
26
|
|
|
27
27
|
DATE_TIME_FORMAT_ERROR_MESSAGE = (
|
|
28
28
|
"does not match expected format YYYY-MM-DDTHH:MM:SS.fffZ"
|
|
@@ -37,7 +37,7 @@ except ImportError:
|
|
|
37
37
|
_missing = object()
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
class BaseModel(
|
|
40
|
+
class BaseModel(BaseModel):
|
|
41
41
|
"""
|
|
42
42
|
Added new extra keys
|
|
43
43
|
- use_enum_names: that's for BaseTitledEnum to use names instead of enum objects
|
|
@@ -121,7 +121,7 @@ class BaseModel(PydanticBaseModel):
|
|
|
121
121
|
exclude_none: bool,
|
|
122
122
|
) -> Any:
|
|
123
123
|
|
|
124
|
-
if isinstance(v,
|
|
124
|
+
if isinstance(v, BaseModel):
|
|
125
125
|
v_dict = v.dict(
|
|
126
126
|
by_alias=by_alias,
|
|
127
127
|
exclude_unset=exclude_unset,
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/classes.py
RENAMED
|
@@ -5,17 +5,16 @@ from typing import List
|
|
|
5
5
|
from typing import Optional
|
|
6
6
|
|
|
7
7
|
from lib.core.entities.base import BaseModel
|
|
8
|
+
from lib.core.entities.base import parse_datetime
|
|
8
9
|
from lib.core.enums import BaseTitledEnum
|
|
9
10
|
from lib.core.enums import ClassTypeEnum
|
|
10
|
-
from
|
|
11
|
-
from
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from pydantic.color import ColorType
|
|
18
|
-
from pydantic.datetime_parse import parse_datetime
|
|
11
|
+
from lib.core.pydantic_v1 import Color
|
|
12
|
+
from lib.core.pydantic_v1 import ColorType
|
|
13
|
+
from lib.core.pydantic_v1 import Extra
|
|
14
|
+
from lib.core.pydantic_v1 import Field
|
|
15
|
+
from lib.core.pydantic_v1 import StrictInt
|
|
16
|
+
from lib.core.pydantic_v1 import StrictStr
|
|
17
|
+
from lib.core.pydantic_v1 import validator
|
|
19
18
|
|
|
20
19
|
DATE_REGEX = r"\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d{3})Z"
|
|
21
20
|
DATE_TIME_FORMAT_ERROR_MESSAGE = (
|
|
@@ -23,7 +22,7 @@ DATE_TIME_FORMAT_ERROR_MESSAGE = (
|
|
|
23
22
|
)
|
|
24
23
|
|
|
25
24
|
|
|
26
|
-
class HexColor(
|
|
25
|
+
class HexColor(BaseModel):
|
|
27
26
|
__root__: ColorType
|
|
28
27
|
|
|
29
28
|
@validator("__root__", pre=True)
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
from lib.core.entities.base import TimedBaseModel
|
|
2
2
|
from lib.core.enums import IntegrationTypeEnum
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
|
|
4
|
+
try:
|
|
5
|
+
from pydantic.v1 import Extra
|
|
6
|
+
from pydantic.v1 import Field
|
|
7
|
+
except ImportError:
|
|
8
|
+
from pydantic import Extra
|
|
9
|
+
from pydantic import Field
|
|
5
10
|
|
|
6
11
|
|
|
7
12
|
class IntegrationEntity(TimedBaseModel):
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/items.py
RENAMED
|
@@ -3,8 +3,8 @@ from typing import Optional
|
|
|
3
3
|
from lib.core.entities.base import BaseItemEntity
|
|
4
4
|
from lib.core.enums import ApprovalStatus
|
|
5
5
|
from lib.core.enums import SegmentationStatus
|
|
6
|
-
from
|
|
7
|
-
from
|
|
6
|
+
from lib.core.pydantic_v1 import Extra
|
|
7
|
+
from lib.core.pydantic_v1 import Field
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class ImageEntity(BaseItemEntity):
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/entities/project.py
RENAMED
|
@@ -11,13 +11,13 @@ from lib.core.enums import BaseTitledEnum
|
|
|
11
11
|
from lib.core.enums import ProjectStatus
|
|
12
12
|
from lib.core.enums import ProjectType
|
|
13
13
|
from lib.core.enums import UserRole
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
20
|
-
from
|
|
14
|
+
from lib.core.pydantic_v1 import Extra
|
|
15
|
+
from lib.core.pydantic_v1 import Field
|
|
16
|
+
from lib.core.pydantic_v1 import parse_datetime
|
|
17
|
+
from lib.core.pydantic_v1 import StrictBool
|
|
18
|
+
from lib.core.pydantic_v1 import StrictFloat
|
|
19
|
+
from lib.core.pydantic_v1 import StrictInt
|
|
20
|
+
from lib.core.pydantic_v1 import StrictStr
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class StringDate(datetime.datetime):
|
|
@@ -82,7 +82,7 @@ class ImagePlugin:
|
|
|
82
82
|
|
|
83
83
|
thumbnail_size = (128, 96)
|
|
84
84
|
background = Image.new("RGB", thumbnail_size, "black")
|
|
85
|
-
image.thumbnail(thumbnail_size, Image.
|
|
85
|
+
image.thumbnail(thumbnail_size, Image.LANCZOS)
|
|
86
86
|
(w, h) = image.size
|
|
87
87
|
background.paste(
|
|
88
88
|
image, ((thumbnail_size[0] - w) // 2, (thumbnail_size[1] - h) // 2)
|
|
@@ -99,7 +99,7 @@ class ImagePlugin:
|
|
|
99
99
|
width, height = im.size
|
|
100
100
|
buffer = io.BytesIO()
|
|
101
101
|
h_size = int(height * base_width / width)
|
|
102
|
-
im.resize((base_width, h_size), Image.
|
|
102
|
+
im.resize((base_width, h_size), Image.LANCZOS).convert("RGB").save(
|
|
103
103
|
buffer, "JPEG"
|
|
104
104
|
)
|
|
105
105
|
buffer.seek(0)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from packaging.version import parse as parse_version
|
|
2
|
+
from pydantic import VERSION
|
|
3
|
+
|
|
4
|
+
if parse_version(VERSION).major < 2:
|
|
5
|
+
import pydantic
|
|
6
|
+
else:
|
|
7
|
+
import pydantic.v1 as pydantic # noqa
|
|
8
|
+
|
|
9
|
+
BaseModel = pydantic.BaseModel
|
|
10
|
+
Field = pydantic.Field
|
|
11
|
+
Extra = pydantic.Extra
|
|
12
|
+
ValidationError = pydantic.ValidationError
|
|
13
|
+
StrictStr = pydantic.StrictStr
|
|
14
|
+
StrictInt = pydantic.StrictInt
|
|
15
|
+
StrictBool = pydantic.StrictBool
|
|
16
|
+
StrictFloat = pydantic.StrictFloat
|
|
17
|
+
ErrorWrapper = pydantic.error_wrappers.ErrorWrapper
|
|
18
|
+
parse_obj_as = pydantic.parse_obj_as
|
|
19
|
+
is_namedtuple = pydantic.typing.is_namedtuple # noqa
|
|
20
|
+
Literal = pydantic.typing.Literal # noqa
|
|
21
|
+
ValueItems = pydantic.utils.ValueItems # noqa
|
|
22
|
+
ROOT_KEY = pydantic.utils.ROOT_KEY # noqa
|
|
23
|
+
sequence_like = pydantic.utils.sequence_like # noqa
|
|
24
|
+
validator = pydantic.validator # noqa
|
|
25
|
+
constr = pydantic.constr # noqa
|
|
26
|
+
conlist = pydantic.conlist # noqa
|
|
27
|
+
parse_datetime = pydantic.datetime_parse.parse_datetime # noqa
|
|
28
|
+
Color = pydantic.color.Color # noqa
|
|
29
|
+
ColorType = pydantic.color.ColorType # noqa
|
|
30
|
+
validators = pydantic.validators # noqa
|
|
31
|
+
WrongConstantError = pydantic.errors.WrongConstantError
|
|
32
|
+
errors = pydantic.errors
|
|
33
|
+
PydanticTypeError = pydantic.errors.PydanticTypeError
|
|
34
|
+
pydantic_validate_arguments = pydantic.validate_arguments
|
|
35
|
+
StrRegexError = pydantic.errors.StrRegexError
|
|
36
|
+
create_model_from_typeddict = pydantic.annotated_types.create_model_from_typeddict
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/service_types.py
RENAMED
|
@@ -6,9 +6,9 @@ from typing import Union
|
|
|
6
6
|
|
|
7
7
|
from lib.core import entities
|
|
8
8
|
from lib.core.exceptions import AppException
|
|
9
|
-
from
|
|
10
|
-
from
|
|
11
|
-
from
|
|
9
|
+
from lib.core.pydantic_v1 import BaseModel
|
|
10
|
+
from lib.core.pydantic_v1 import Extra
|
|
11
|
+
from lib.core.pydantic_v1 import Field
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class Limit(BaseModel):
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
|
-
from
|
|
4
|
-
from
|
|
5
|
-
from
|
|
3
|
+
from lib.core.pydantic_v1 import BaseModel
|
|
4
|
+
from lib.core.pydantic_v1 import constr
|
|
5
|
+
from lib.core.pydantic_v1 import Extra
|
|
6
6
|
|
|
7
7
|
NotEmptyStr = constr(strict=True, min_length=1)
|
|
8
8
|
|
|
@@ -48,7 +48,11 @@ from lib.core.types import PriorityScoreEntity
|
|
|
48
48
|
from lib.core.usecases.base import BaseReportableUseCase
|
|
49
49
|
from lib.core.video_convertor import VideoFrameGenerator
|
|
50
50
|
from lib.infrastructure.utils import divide_to_chunks
|
|
51
|
-
|
|
51
|
+
|
|
52
|
+
try:
|
|
53
|
+
from pydantic.v1 import BaseModel
|
|
54
|
+
except ImportError:
|
|
55
|
+
from pydantic import BaseModel
|
|
52
56
|
|
|
53
57
|
logger = logging.getLogger("sa")
|
|
54
58
|
|
|
@@ -231,6 +235,8 @@ async def upload_small_annotations(
|
|
|
231
235
|
await upload(chunk)
|
|
232
236
|
chunk = []
|
|
233
237
|
_size = 0
|
|
238
|
+
if not chunk:
|
|
239
|
+
queue.put_nowait(None)
|
|
234
240
|
chunk.append(item_data)
|
|
235
241
|
_size += item_data.file_size
|
|
236
242
|
if chunk:
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/usecases/models.py
RENAMED
|
@@ -45,6 +45,7 @@ class PrepareExportUseCase(BaseUseCase):
|
|
|
45
45
|
include_fuse: bool,
|
|
46
46
|
only_pinned: bool,
|
|
47
47
|
annotation_statuses: List[str] = None,
|
|
48
|
+
integration_id: int = None,
|
|
48
49
|
):
|
|
49
50
|
super().__init__(),
|
|
50
51
|
self._project = project
|
|
@@ -53,6 +54,7 @@ class PrepareExportUseCase(BaseUseCase):
|
|
|
53
54
|
self._annotation_statuses = annotation_statuses
|
|
54
55
|
self._include_fuse = include_fuse
|
|
55
56
|
self._only_pinned = only_pinned
|
|
57
|
+
self._integration_id = integration_id
|
|
56
58
|
|
|
57
59
|
def validate_only_pinned(self):
|
|
58
60
|
if (
|
|
@@ -107,6 +109,7 @@ class PrepareExportUseCase(BaseUseCase):
|
|
|
107
109
|
annotation_statuses=self._annotation_statuses,
|
|
108
110
|
include_fuse=self._include_fuse,
|
|
109
111
|
only_pinned=self._only_pinned,
|
|
112
|
+
integration_id=self._integration_id,
|
|
110
113
|
)
|
|
111
114
|
if not response.ok:
|
|
112
115
|
raise AppException(response.error)
|
{superannotate-4.4.15.dev1 → superannotate-4.4.16}/src/superannotate/lib/core/video_convertor.py
RENAMED
|
@@ -6,7 +6,11 @@ from typing import List
|
|
|
6
6
|
from typing import Optional
|
|
7
7
|
|
|
8
8
|
from lib.core.enums import AnnotationTypes
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
try:
|
|
11
|
+
from pydantic.v1 import BaseModel
|
|
12
|
+
except ImportError:
|
|
13
|
+
from pydantic import BaseModel
|
|
10
14
|
|
|
11
15
|
|
|
12
16
|
class Annotation(BaseModel):
|
|
@@ -1011,6 +1011,7 @@ class Controller(BaseController):
|
|
|
1011
1011
|
include_fuse: bool,
|
|
1012
1012
|
only_pinned: bool,
|
|
1013
1013
|
annotation_statuses: List[str] = None,
|
|
1014
|
+
integration_id: int = None,
|
|
1014
1015
|
):
|
|
1015
1016
|
project = self.get_project(project_name)
|
|
1016
1017
|
use_case = usecases.PrepareExportUseCase(
|
|
@@ -1020,6 +1021,7 @@ class Controller(BaseController):
|
|
|
1020
1021
|
include_fuse=include_fuse,
|
|
1021
1022
|
only_pinned=only_pinned,
|
|
1022
1023
|
annotation_statuses=annotation_statuses,
|
|
1024
|
+
integration_id=integration_id,
|
|
1023
1025
|
)
|
|
1024
1026
|
return use_case.execute()
|
|
1025
1027
|
|
|
@@ -151,6 +151,7 @@ class ServiceProvider(BaseServiceProvider):
|
|
|
151
151
|
annotation_statuses: List[str],
|
|
152
152
|
include_fuse: bool,
|
|
153
153
|
only_pinned: bool,
|
|
154
|
+
integration_id: int = None,
|
|
154
155
|
):
|
|
155
156
|
annotation_statuses = ",".join(
|
|
156
157
|
[str(constants.AnnotationStatus.get_value(i)) for i in annotation_statuses]
|
|
@@ -165,7 +166,8 @@ class ServiceProvider(BaseServiceProvider):
|
|
|
165
166
|
}
|
|
166
167
|
if folders:
|
|
167
168
|
data["folder_names"] = folders
|
|
168
|
-
|
|
169
|
+
if integration_id is not None:
|
|
170
|
+
data["integration_id"] = integration_id
|
|
169
171
|
return self.client.request(
|
|
170
172
|
self.URL_PREPARE_EXPORT,
|
|
171
173
|
"post",
|
|
@@ -18,7 +18,12 @@ from lib.core.service_types import UploadAnnotations
|
|
|
18
18
|
from lib.core.service_types import UploadAnnotationsResponse
|
|
19
19
|
from lib.core.serviceproviders import BaseAnnotationService
|
|
20
20
|
from lib.infrastructure.stream_data_handler import StreamedAnnotations
|
|
21
|
-
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
from pydantic.v1 import parse_obj_as
|
|
24
|
+
except ImportError:
|
|
25
|
+
from pydantic import parse_obj_as
|
|
26
|
+
|
|
22
27
|
from superannotate.lib.infrastructure.services.http_client import AIOHttpSession
|
|
23
28
|
|
|
24
29
|
logger = logging.getLogger("sa")
|
|
@@ -90,7 +95,7 @@ class AnnotationService(BaseAnnotationService):
|
|
|
90
95
|
synced = await session.get(sync_status_url, params=sync_params)
|
|
91
96
|
synced = await synced.json()
|
|
92
97
|
synced = synced["status"]
|
|
93
|
-
await asyncio.sleep(
|
|
98
|
+
await asyncio.sleep(5)
|
|
94
99
|
return synced
|
|
95
100
|
|
|
96
101
|
async def get_big_annotation(
|
|
@@ -248,13 +253,13 @@ class AnnotationService(BaseAnnotationService):
|
|
|
248
253
|
folder: entities.FolderEntity,
|
|
249
254
|
items_name_data_map: Dict[str, dict],
|
|
250
255
|
) -> UploadAnnotationsResponse:
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
(
|
|
254
|
-
|
|
255
|
-
),
|
|
256
|
-
|
|
257
|
-
|
|
256
|
+
params = [
|
|
257
|
+
("team_id", project.team_id),
|
|
258
|
+
("project_id", project.id),
|
|
259
|
+
("folder_id", folder.id),
|
|
260
|
+
*[("image_names[]", item_name) for item_name in items_name_data_map.keys()],
|
|
261
|
+
]
|
|
262
|
+
url = urljoin(self.assets_provider_url, f"{self.URL_UPLOAD_ANNOTATIONS}")
|
|
258
263
|
headers = copy.copy(self.client.default_headers)
|
|
259
264
|
del headers["Content-Type"]
|
|
260
265
|
async with AIOHttpSession(
|
|
@@ -277,12 +282,6 @@ class AnnotationService(BaseAnnotationService):
|
|
|
277
282
|
filename=key,
|
|
278
283
|
content_type="application/json",
|
|
279
284
|
)
|
|
280
|
-
|
|
281
|
-
params = {
|
|
282
|
-
"team_id": project.team_id,
|
|
283
|
-
"project_id": project.id,
|
|
284
|
-
"folder_id": folder.id,
|
|
285
|
-
}
|
|
286
285
|
_response = await session.request(
|
|
287
286
|
"post", url, params=params, data=form_data
|
|
288
287
|
)
|