superb-ai-onprem 0.4.4__tar.gz → 0.5.0__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.
Potentially problematic release.
This version of superb-ai-onprem might be problematic. Click here for more details.
- {superb_ai_onprem-0.4.4/superb_ai_onprem.egg-info → superb_ai_onprem-0.5.0}/PKG-INFO +1 -1
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/__init__.py +30 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/_version.py +16 -3
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/__init__.py +2 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/annotation.py +1 -1
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/data.py +2 -0
- superb_ai_onprem-0.5.0/spb_onprem/data/entities/frame.py +19 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/__init__.py +4 -0
- superb_ai_onprem-0.5.0/spb_onprem/data/params/data_list.py +226 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/insert_annotation_version.py +3 -3
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/insert_slice_annotation_version.py +4 -4
- superb_ai_onprem-0.5.0/spb_onprem/data/params/update_frames.py +40 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/update_slice_annotation_version.py +4 -4
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/queries.py +34 -14
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/service.py +34 -3
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/entities.py +2 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/searches.py +28 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0/superb_ai_onprem.egg-info}/PKG-INFO +1 -1
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/superb_ai_onprem.egg-info/SOURCES.txt +2 -0
- superb_ai_onprem-0.4.4/spb_onprem/data/params/data_list.py +0 -107
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/.github/workflows/publish.yml +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/.gitignore +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/LICENSE +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/Pipfile +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/Pipfile.lock +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/README.md +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/pyproject.toml +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/setup.cfg +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/setup.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/entities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/entities/activity.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/entities/activity_history.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/activities.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/activity.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/create_activity.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/delete_activity.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/get_activity_history.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/start_activity.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/update_activity.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/params/update_activity_history.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/queries.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/activities/service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/base_model.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/base_service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/base_types.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/contents/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/contents/entities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/contents/entities/base_content.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/contents/entities/content.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/contents/queries.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/contents/service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/data_meta.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/data_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/prediction.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/entities/scene.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/enums/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/enums/data_meta_type.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/enums/data_status.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/enums/data_type.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/enums/scene_type.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/change_data_labeler.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/change_data_reviewer.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/change_data_status.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/create_data.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/data.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/delete_annotation_version.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/delete_data.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/delete_prediction.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/delete_scene.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/delete_slice_annotation_version.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/insert_data_to_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/insert_prediction.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/insert_scene.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/remove_data_from_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/remove_data_meta.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/update_annotation.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/update_data.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/update_data_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/update_scene.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/update_slice_annotation.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/data/params/upsert_data_meta.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/entities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/entities/dataset.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/params/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/params/create_dataset.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/params/dataset.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/params/datasets.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/params/update_dataset.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/queries.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/datasets/service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exceptions.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/entities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/entities/export.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/params/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/params/create_export.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/params/delete_export.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/params/export.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/params/exports.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/params/update_export.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/queries/get_exports.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/queries.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/exports/service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/entities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/entities/slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/params/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/params/create_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/params/delete_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/params/slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/params/slices.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/params/update_slice.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/queries.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/slices/service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/users/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/users/entities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/spb_onprem/users/entities/auth.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/superb_ai_onprem.egg-info/dependency_links.txt +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/superb_ai_onprem.egg-info/requires.txt +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/superb_ai_onprem.egg-info/top_level.txt +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/activities/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/activities/real_test.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/activities/test_get_activity_history.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/activities/test_params.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/activities/test_service.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/exports/__init__.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/exports/real_test.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/exports/test_entities.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/exports/test_integration.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/exports/test_params.py +0 -0
- {superb_ai_onprem-0.4.4 → superb_ai_onprem-0.5.0}/tests/exports/test_service.py +0 -0
|
@@ -27,6 +27,7 @@ from .entities import (
|
|
|
27
27
|
ActivityHistory,
|
|
28
28
|
Export,
|
|
29
29
|
Content,
|
|
30
|
+
Frame,
|
|
30
31
|
|
|
31
32
|
# Enums
|
|
32
33
|
DataType,
|
|
@@ -44,6 +45,20 @@ from .searches import (
|
|
|
44
45
|
AnnotationFilter,
|
|
45
46
|
DataListFilter,
|
|
46
47
|
DataFilterOptions,
|
|
48
|
+
AnnotationRangeFilter,
|
|
49
|
+
DateTimeRangeFilter,
|
|
50
|
+
UserFilter,
|
|
51
|
+
StringMetaFilter,
|
|
52
|
+
NumberMetaFilter,
|
|
53
|
+
DateTimeMetaFilter,
|
|
54
|
+
MetaFilterOptions,
|
|
55
|
+
DataSliceStatusFilter,
|
|
56
|
+
DataSliceUserFilter,
|
|
57
|
+
DataSliceTagsFilter,
|
|
58
|
+
DataSliceCommentFilter,
|
|
59
|
+
DataSlicePropertiesFilter,
|
|
60
|
+
DataSliceFilter,
|
|
61
|
+
CommentStatus,
|
|
47
62
|
DatasetsFilter,
|
|
48
63
|
DatasetsFilterOptions,
|
|
49
64
|
SlicesFilter,
|
|
@@ -77,6 +92,7 @@ __all__ = (
|
|
|
77
92
|
"ActivityHistory",
|
|
78
93
|
"Export",
|
|
79
94
|
"Content",
|
|
95
|
+
"Frame",
|
|
80
96
|
|
|
81
97
|
# Enums
|
|
82
98
|
"DataType",
|
|
@@ -87,11 +103,25 @@ __all__ = (
|
|
|
87
103
|
"ActivityStatus",
|
|
88
104
|
"ActivitySchema",
|
|
89
105
|
"SchemaType",
|
|
106
|
+
"CommentStatus",
|
|
90
107
|
|
|
91
108
|
# Filters
|
|
92
109
|
"AnnotationFilter",
|
|
93
110
|
"DataListFilter",
|
|
94
111
|
"DataFilterOptions",
|
|
112
|
+
"AnnotationRangeFilter",
|
|
113
|
+
"DateTimeRangeFilter",
|
|
114
|
+
"UserFilter",
|
|
115
|
+
"StringMetaFilter",
|
|
116
|
+
"NumberMetaFilter",
|
|
117
|
+
"DateTimeMetaFilter",
|
|
118
|
+
"MetaFilterOptions",
|
|
119
|
+
"DataSliceStatusFilter",
|
|
120
|
+
"DataSliceUserFilter",
|
|
121
|
+
"DataSliceTagsFilter",
|
|
122
|
+
"DataSliceCommentFilter",
|
|
123
|
+
"DataSlicePropertiesFilter",
|
|
124
|
+
"DataSliceFilter",
|
|
95
125
|
"DatasetsFilter",
|
|
96
126
|
"DatasetsFilterOptions",
|
|
97
127
|
"SlicesFilter",
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
3
|
|
|
4
|
-
__all__ = [
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
5
12
|
|
|
6
13
|
TYPE_CHECKING = False
|
|
7
14
|
if TYPE_CHECKING:
|
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
|
9
16
|
from typing import Union
|
|
10
17
|
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
12
20
|
else:
|
|
13
21
|
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
14
23
|
|
|
15
24
|
version: str
|
|
16
25
|
__version__: str
|
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
|
18
27
|
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
19
30
|
|
|
20
|
-
__version__ = version = '0.
|
|
21
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.5.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 5, 0)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = 'gba065a190'
|
|
@@ -11,7 +11,7 @@ class AnnotationVersion(CustomBaseModel):
|
|
|
11
11
|
This has the content of the data annotation.
|
|
12
12
|
"""
|
|
13
13
|
id: Optional[str] = None
|
|
14
|
-
|
|
14
|
+
channels: Optional[List[str]] = None
|
|
15
15
|
version: Optional[str] = None
|
|
16
16
|
content: Optional[BaseContent] = None
|
|
17
17
|
meta: Optional[dict] = None
|
|
@@ -6,6 +6,7 @@ from .annotation import Annotation
|
|
|
6
6
|
from .prediction import Prediction
|
|
7
7
|
from .data_meta import DataMeta
|
|
8
8
|
from .data_slice import DataSlice
|
|
9
|
+
from .frame import Frame
|
|
9
10
|
from spb_onprem.contents.entities import BaseContent
|
|
10
11
|
|
|
11
12
|
class Data(CustomBaseModel):
|
|
@@ -18,6 +19,7 @@ class Data(CustomBaseModel):
|
|
|
18
19
|
key: Optional[str] = None
|
|
19
20
|
type: Optional[DataType] = None
|
|
20
21
|
scene: Optional[List[Scene]] = None
|
|
22
|
+
frames: Optional[List[Frame]] = None
|
|
21
23
|
thumbnail: Optional[BaseContent] = None
|
|
22
24
|
annotation: Optional[Annotation] = None
|
|
23
25
|
predictions: Optional[List[Prediction]] = None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
from spb_onprem.base_model import CustomBaseModel, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class GeoLocation(CustomBaseModel):
|
|
6
|
+
lat: float
|
|
7
|
+
lon: float
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Frame(CustomBaseModel):
|
|
11
|
+
"""
|
|
12
|
+
The frame of the data.
|
|
13
|
+
Frame is the representation of a single frame in a sequence of data, such as a video or time series.
|
|
14
|
+
"""
|
|
15
|
+
id: str
|
|
16
|
+
index: Optional[int] = None
|
|
17
|
+
captured_at: Optional[str] = Field(None, alias="capturedAt")
|
|
18
|
+
geo_location: Optional[GeoLocation] = Field(None, alias="geoLocation")
|
|
19
|
+
meta: Optional[dict] = None
|
|
@@ -63,6 +63,9 @@ from .change_data_reviewer import (
|
|
|
63
63
|
from .update_data_slice import (
|
|
64
64
|
update_data_slice_params,
|
|
65
65
|
)
|
|
66
|
+
from .update_frames import (
|
|
67
|
+
update_frames_params,
|
|
68
|
+
)
|
|
66
69
|
|
|
67
70
|
__all__ = [
|
|
68
71
|
"create_params",
|
|
@@ -90,4 +93,5 @@ __all__ = [
|
|
|
90
93
|
"change_data_labeler_params",
|
|
91
94
|
"change_data_reviewer_params",
|
|
92
95
|
"update_data_slice_params",
|
|
96
|
+
"update_frames_params",
|
|
93
97
|
]
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
from typing import (
|
|
2
|
+
Optional,
|
|
3
|
+
List,
|
|
4
|
+
Union,
|
|
5
|
+
Any
|
|
6
|
+
)
|
|
7
|
+
from enum import Enum
|
|
8
|
+
from spb_onprem.base_model import CustomBaseModel, Field
|
|
9
|
+
from spb_onprem.data.enums import DataType, DataStatus
|
|
10
|
+
from spb_onprem.exceptions import BadParameterError
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CommentStatus(str, Enum):
|
|
14
|
+
"""댓글 상태를 나타내는 열거형"""
|
|
15
|
+
RESOLVED = "RESOLVED"
|
|
16
|
+
UNRESOLVED = "UNRESOLVED"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class AnnotationFilter(CustomBaseModel):
|
|
20
|
+
type: Optional[str] = None
|
|
21
|
+
name: Optional[str] = None
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class AnnotationRangeFilter(CustomBaseModel):
|
|
25
|
+
annotation_type: Optional[str] = Field(None, alias="annotationType")
|
|
26
|
+
class_name: Optional[str] = Field(None, alias="className")
|
|
27
|
+
class_count_equals: Optional[int] = Field(None, alias="classCountEquals")
|
|
28
|
+
class_count_in: Optional[List[int]] = Field(None, alias="classCountIn")
|
|
29
|
+
class_count_max: Optional[int] = Field(None, alias="classCountMax")
|
|
30
|
+
class_count_min: Optional[int] = Field(None, alias="classCountMin")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class DateTimeRangeFilter(CustomBaseModel):
|
|
34
|
+
"""날짜/시간 범위 필터"""
|
|
35
|
+
from_date: Optional[str] = Field(None, alias="from")
|
|
36
|
+
to_date: Optional[str] = Field(None, alias="to")
|
|
37
|
+
equals: Optional[str] = None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class UserFilter(CustomBaseModel):
|
|
41
|
+
"""사용자 필터 옵션"""
|
|
42
|
+
equals: Optional[str] = None
|
|
43
|
+
contains: Optional[str] = None
|
|
44
|
+
in_list: Optional[List[str]] = Field(None, alias="in")
|
|
45
|
+
exists: Optional[bool] = None
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class StringMetaFilter(CustomBaseModel):
|
|
49
|
+
"""문자열 메타 데이터 필터"""
|
|
50
|
+
key: str
|
|
51
|
+
contains: Optional[str] = None
|
|
52
|
+
equals: Optional[str] = None
|
|
53
|
+
in_list: Optional[List[str]] = Field(None, alias="in")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class NumberMetaFilter(CustomBaseModel):
|
|
57
|
+
"""숫자 메타 데이터 필터"""
|
|
58
|
+
key: str
|
|
59
|
+
min_value: Optional[float] = Field(None, alias="min")
|
|
60
|
+
max_value: Optional[float] = Field(None, alias="max")
|
|
61
|
+
equals: Optional[float] = None
|
|
62
|
+
in_list: Optional[List[float]] = Field(None, alias="in")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class DateTimeMetaFilter(CustomBaseModel):
|
|
66
|
+
"""날짜/시간 메타 데이터 필터"""
|
|
67
|
+
key: str
|
|
68
|
+
from_date: Optional[str] = Field(None, alias="from")
|
|
69
|
+
to_date: Optional[str] = Field(None, alias="to")
|
|
70
|
+
equals: Optional[str] = None
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
class MetaFilterOptions(CustomBaseModel):
|
|
74
|
+
"""메타 데이터 필터 옵션들"""
|
|
75
|
+
string_meta: Optional[List[StringMetaFilter]] = Field(None, alias="stringMeta")
|
|
76
|
+
number_meta: Optional[List[NumberMetaFilter]] = Field(None, alias="numberMeta")
|
|
77
|
+
date_time_meta: Optional[List[DateTimeMetaFilter]] = Field(None, alias="dateTimeMeta")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class DataSliceStatusFilter(CustomBaseModel):
|
|
81
|
+
"""데이터 슬라이스 상태 필터"""
|
|
82
|
+
in_list: Optional[List[DataStatus]] = Field(None, alias="in")
|
|
83
|
+
equals: Optional[DataStatus] = None
|
|
84
|
+
not_in: Optional[List[DataStatus]] = Field(None, alias="notIn")
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class DataSliceUserFilter(CustomBaseModel):
|
|
88
|
+
"""데이터 슬라이스 사용자 필터 (labeler, reviewer용)"""
|
|
89
|
+
equals: Optional[str] = None
|
|
90
|
+
in_list: Optional[List[str]] = Field(None, alias="in")
|
|
91
|
+
exists: Optional[bool] = None
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class DataSliceTagsFilter(CustomBaseModel):
|
|
95
|
+
"""데이터 슬라이스 태그 필터"""
|
|
96
|
+
contains: Optional[str] = None
|
|
97
|
+
has_any: Optional[List[str]] = Field(None, alias="hasAny")
|
|
98
|
+
has_all: Optional[List[str]] = Field(None, alias="hasAll")
|
|
99
|
+
exists: Optional[bool] = None
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class DataSliceCommentFilter(CustomBaseModel):
|
|
103
|
+
"""데이터 슬라이스 댓글 필터"""
|
|
104
|
+
comment_contains: Optional[str] = Field(None, alias="commentContains")
|
|
105
|
+
category: Optional[str] = None
|
|
106
|
+
status: Optional[CommentStatus] = None
|
|
107
|
+
created_by: Optional[UserFilter] = Field(None, alias="createdBy")
|
|
108
|
+
created_at: Optional[DateTimeRangeFilter] = Field(None, alias="createdAt")
|
|
109
|
+
exists: Optional[bool] = None
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class DataSlicePropertiesFilter(CustomBaseModel):
|
|
113
|
+
"""슬라이스 속성 필터 (ID 제외)"""
|
|
114
|
+
status: Optional[DataSliceStatusFilter] = None
|
|
115
|
+
labeler: Optional[DataSliceUserFilter] = None
|
|
116
|
+
reviewer: Optional[DataSliceUserFilter] = None
|
|
117
|
+
tags: Optional[DataSliceTagsFilter] = None
|
|
118
|
+
status_changed_at: Optional[DateTimeRangeFilter] = Field(None, alias="statusChangedAt")
|
|
119
|
+
comments: Optional[DataSliceCommentFilter] = None
|
|
120
|
+
meta: Optional[MetaFilterOptions] = None
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class DataSliceFilter(CustomBaseModel):
|
|
124
|
+
"""슬라이스 필터 (ID + must/not 구조)"""
|
|
125
|
+
id: str # 검색할 슬라이스 ID (필수)
|
|
126
|
+
must: Optional[DataSlicePropertiesFilter] = None # 만족해야 하는 조건
|
|
127
|
+
not_filter: Optional[DataSlicePropertiesFilter] = Field(None, alias="not") # 만족하지 않아야 하는 조건
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
class DataFilterOptions(CustomBaseModel):
|
|
131
|
+
id_in: Optional[List[str]] = Field(None, alias="idIn")
|
|
132
|
+
slice_id: Optional[str] = Field(None, alias="sliceId")
|
|
133
|
+
slice_id_in: Optional[List[str]] = Field(None, alias="sliceIdIn")
|
|
134
|
+
slice_id_any: Optional[List[str]] = Field(None, alias="sliceIdAny") # 추가된 필드
|
|
135
|
+
slice_id_exists: Optional[bool] = Field(None, alias="sliceIdExists") # 추가된 필드
|
|
136
|
+
key_contains: Optional[str] = Field(None, alias="keyContains")
|
|
137
|
+
key_matches: Optional[str] = Field(None, alias="keyMatches")
|
|
138
|
+
sub_type_contains: Optional[str] = Field(None, alias="subTypeContains") # 추가된 필드
|
|
139
|
+
sub_type_matches: Optional[str] = Field(None, alias="subTypeMatches") # 추가된 필드
|
|
140
|
+
type_in: Optional[List[DataType]] = Field(None, alias="typeIn")
|
|
141
|
+
annotation_any: Optional[List[AnnotationFilter]] = Field(None, alias="annotationAny")
|
|
142
|
+
annotation_in: Optional[List[AnnotationFilter]] = Field(None, alias="annotationIn")
|
|
143
|
+
annotation_exists: Optional[bool] = Field(None, alias="annotationExists")
|
|
144
|
+
annotation_range: Optional[List[AnnotationRangeFilter]] = Field(None, alias="annotationRange")
|
|
145
|
+
prediction_set_id_in: Optional[List[str]] = Field(None, alias="predictionSetIdIn")
|
|
146
|
+
prediction_set_id_exists: Optional[bool] = Field(None, alias="predictionSetIdExists")
|
|
147
|
+
|
|
148
|
+
# 추가된 필드들 (GraphQL과 매칭)
|
|
149
|
+
created_at: Optional[DateTimeRangeFilter] = Field(None, alias="createdAt")
|
|
150
|
+
updated_at: Optional[DateTimeRangeFilter] = Field(None, alias="updatedAt")
|
|
151
|
+
created_by: Optional[UserFilter] = Field(None, alias="createdBy")
|
|
152
|
+
updated_by: Optional[UserFilter] = Field(None, alias="updatedBy")
|
|
153
|
+
meta: Optional[MetaFilterOptions] = None
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class DataListFilter(CustomBaseModel):
|
|
157
|
+
must_filter: Optional[DataFilterOptions] = Field(None, alias="must")
|
|
158
|
+
not_filter: Optional[DataFilterOptions] = Field(None, alias="not")
|
|
159
|
+
slice: Optional[DataSliceFilter] = Field(None, alias="slice")
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def get_data_id_list_params(
|
|
163
|
+
dataset_id: str,
|
|
164
|
+
data_filter: Optional[DataListFilter] = None,
|
|
165
|
+
cursor: Optional[str] = None,
|
|
166
|
+
length: Optional[int] = 50,
|
|
167
|
+
):
|
|
168
|
+
"""Make the variables for the dataIdList query.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
dataset_id (str): The dataset id.
|
|
172
|
+
data_filter (Optional[DataListFilter], optional): The filter for the data list. Defaults to None.
|
|
173
|
+
cursor (Optional[str], optional): The cursor for the data list. Defaults to None.
|
|
174
|
+
length (Optional[int], optional): The length of the data list. Defaults to 50.
|
|
175
|
+
|
|
176
|
+
Raises:
|
|
177
|
+
BadParameterError: The maximum length is 200.
|
|
178
|
+
|
|
179
|
+
Returns:
|
|
180
|
+
dict: The variables for the dataIdList query.
|
|
181
|
+
"""
|
|
182
|
+
if length > 200:
|
|
183
|
+
raise BadParameterError("The maximum length is 200.")
|
|
184
|
+
|
|
185
|
+
return {
|
|
186
|
+
"dataset_id": dataset_id,
|
|
187
|
+
"filter": data_filter.model_dump(
|
|
188
|
+
by_alias=True, exclude_unset=True
|
|
189
|
+
) if data_filter else None,
|
|
190
|
+
"cursor": cursor,
|
|
191
|
+
"length": length
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def get_data_list_params(
|
|
196
|
+
dataset_id: str,
|
|
197
|
+
data_filter: Optional[DataListFilter] = None,
|
|
198
|
+
cursor: Optional[str] = None,
|
|
199
|
+
length: Optional[int] = 10,
|
|
200
|
+
):
|
|
201
|
+
"""Make the variables for the dataList query.
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
dataset_id (str): The dataset id.
|
|
205
|
+
data_filter (Optional[DataListFilter], optional): The filter for the data list. Defaults to None.
|
|
206
|
+
cursor (Optional[str], optional): The cursor for the data list. Defaults to None.
|
|
207
|
+
length (Optional[int], optional): The length of the data list. Defaults to 10.
|
|
208
|
+
|
|
209
|
+
Raises:
|
|
210
|
+
BadParameterError: The maximum length is 50.
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
dict: The variables for the dataList query.
|
|
214
|
+
"""
|
|
215
|
+
|
|
216
|
+
if length > 50:
|
|
217
|
+
raise BadParameterError("The maximum length is 50.")
|
|
218
|
+
|
|
219
|
+
return {
|
|
220
|
+
"dataset_id": dataset_id,
|
|
221
|
+
"filter": data_filter.model_dump(
|
|
222
|
+
by_alias=True, exclude_unset=True
|
|
223
|
+
) if data_filter else None,
|
|
224
|
+
"cursor": cursor,
|
|
225
|
+
"length": length
|
|
226
|
+
}
|
|
@@ -23,9 +23,9 @@ def insert_annotation_version_params(
|
|
|
23
23
|
"meta": version.meta
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
#
|
|
27
|
-
if version.
|
|
28
|
-
version_data["
|
|
26
|
+
# channels과 version 필드가 있으면 추가
|
|
27
|
+
if version.channels is not None:
|
|
28
|
+
version_data["channels"] = version.channels
|
|
29
29
|
if version.version is not None:
|
|
30
30
|
version_data["version"] = version.version
|
|
31
31
|
|
|
@@ -24,10 +24,10 @@ def insert_slice_annotation_version_params(
|
|
|
24
24
|
),
|
|
25
25
|
"meta": version.meta
|
|
26
26
|
}
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
if version.
|
|
30
|
-
version_data["
|
|
27
|
+
|
|
28
|
+
# channels과 version 필드가 있으면 추가
|
|
29
|
+
if version.channels is not None:
|
|
30
|
+
version_data["channels"] = version.channels
|
|
31
31
|
if version.version is not None:
|
|
32
32
|
version_data["version"] = version.version
|
|
33
33
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Union, List
|
|
3
|
+
from spb_onprem.data.entities import Frame
|
|
4
|
+
from spb_onprem.base_types import UndefinedType, Undefined
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def update_frames_params(
|
|
8
|
+
dataset_id: str,
|
|
9
|
+
data_id: str,
|
|
10
|
+
frames: Union[List[Frame], UndefinedType] = Undefined,
|
|
11
|
+
):
|
|
12
|
+
"""Update frames of selected data.
|
|
13
|
+
Args:
|
|
14
|
+
dataset_id (str): dataset id which the data belongs to
|
|
15
|
+
data_id (str): data id to be updated
|
|
16
|
+
frames (list[Frame]): list of frames to be updated
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
dict: the params for graphql query
|
|
20
|
+
"""
|
|
21
|
+
result = {
|
|
22
|
+
"dataset_id": dataset_id,
|
|
23
|
+
"data_id": data_id,
|
|
24
|
+
}
|
|
25
|
+
if frames is not Undefined:
|
|
26
|
+
result["frames"] = []
|
|
27
|
+
for frame in frames:
|
|
28
|
+
frame_data = {
|
|
29
|
+
"index": frame.index,
|
|
30
|
+
"capturedAt": frame.captured_at,
|
|
31
|
+
"meta": json.dumps(frame.meta) if frame.meta else None,
|
|
32
|
+
}
|
|
33
|
+
if frame.geo_location is not None:
|
|
34
|
+
frame_data["geoLocation"] = {
|
|
35
|
+
"lat": frame.geo_location.lat,
|
|
36
|
+
"lon": frame.geo_location.lon
|
|
37
|
+
}
|
|
38
|
+
result["frames"].append(frame_data)
|
|
39
|
+
|
|
40
|
+
return result
|
|
@@ -8,7 +8,7 @@ def update_slice_annotation_version_params(
|
|
|
8
8
|
data_id: str,
|
|
9
9
|
slice_id: str,
|
|
10
10
|
id: str,
|
|
11
|
-
|
|
11
|
+
channels: Union[List[str], UndefinedType, None] = Undefined,
|
|
12
12
|
version: Union[str, UndefinedType, None] = Undefined,
|
|
13
13
|
meta: Union[dict, UndefinedType, None] = Undefined,
|
|
14
14
|
):
|
|
@@ -19,7 +19,7 @@ def update_slice_annotation_version_params(
|
|
|
19
19
|
data_id (str): The ID of the data.
|
|
20
20
|
slice_id (str): The slice ID.
|
|
21
21
|
id (str): The annotation version ID.
|
|
22
|
-
|
|
22
|
+
channels (list[str], optional): The channels of the annotation version.
|
|
23
23
|
version (str, optional): The version string of the annotation version.
|
|
24
24
|
meta (dict, optional): The meta of the annotation version.
|
|
25
25
|
"""
|
|
@@ -30,8 +30,8 @@ def update_slice_annotation_version_params(
|
|
|
30
30
|
"id": id,
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if
|
|
34
|
-
variables["
|
|
33
|
+
if channels is not Undefined:
|
|
34
|
+
variables["channels"] = channels
|
|
35
35
|
if version is not Undefined:
|
|
36
36
|
variables["version"] = version
|
|
37
37
|
if meta is not Undefined:
|
|
@@ -20,6 +20,7 @@ from .params import (
|
|
|
20
20
|
change_data_labeler_params,
|
|
21
21
|
change_data_reviewer_params,
|
|
22
22
|
update_data_slice_params,
|
|
23
|
+
update_frames_params,
|
|
23
24
|
)
|
|
24
25
|
|
|
25
26
|
|
|
@@ -46,10 +47,21 @@ class Schemas:
|
|
|
46
47
|
}
|
|
47
48
|
meta
|
|
48
49
|
}
|
|
50
|
+
frames {
|
|
51
|
+
id
|
|
52
|
+
index
|
|
53
|
+
capturedAt
|
|
54
|
+
geoLocation {
|
|
55
|
+
lat
|
|
56
|
+
lon
|
|
57
|
+
}
|
|
58
|
+
meta
|
|
59
|
+
}
|
|
49
60
|
annotation {
|
|
61
|
+
meta
|
|
50
62
|
versions {
|
|
51
63
|
id
|
|
52
|
-
|
|
64
|
+
channels
|
|
53
65
|
version
|
|
54
66
|
content {
|
|
55
67
|
id
|
|
@@ -57,23 +69,11 @@ class Schemas:
|
|
|
57
69
|
meta
|
|
58
70
|
}
|
|
59
71
|
}
|
|
60
|
-
predictions {
|
|
61
|
-
setId
|
|
62
|
-
content {
|
|
63
|
-
id
|
|
64
|
-
}
|
|
65
|
-
meta
|
|
66
|
-
}
|
|
67
72
|
meta {
|
|
68
73
|
key
|
|
69
74
|
type
|
|
70
75
|
value
|
|
71
76
|
}
|
|
72
|
-
systemMeta {
|
|
73
|
-
key
|
|
74
|
-
type
|
|
75
|
-
value
|
|
76
|
-
}
|
|
77
77
|
slices {
|
|
78
78
|
id
|
|
79
79
|
status
|
|
@@ -84,7 +84,7 @@ class Schemas:
|
|
|
84
84
|
annotation {
|
|
85
85
|
versions {
|
|
86
86
|
id
|
|
87
|
-
|
|
87
|
+
channels
|
|
88
88
|
version
|
|
89
89
|
content {
|
|
90
90
|
id
|
|
@@ -574,3 +574,23 @@ class Queries():
|
|
|
574
574
|
''',
|
|
575
575
|
"variables": update_data_slice_params,
|
|
576
576
|
}
|
|
577
|
+
|
|
578
|
+
UPDATE_FRAMES = {
|
|
579
|
+
"name": "updateFrames",
|
|
580
|
+
"query": f'''
|
|
581
|
+
mutation (
|
|
582
|
+
$dataset_id: ID!,
|
|
583
|
+
$data_id: ID!,
|
|
584
|
+
$frames: [DataFrameInput!],
|
|
585
|
+
) {{
|
|
586
|
+
updateFrames(
|
|
587
|
+
datasetId: $dataset_id,
|
|
588
|
+
dataId: $data_id,
|
|
589
|
+
frames: $frames,
|
|
590
|
+
) {{
|
|
591
|
+
{Schemas.DATA}
|
|
592
|
+
}}
|
|
593
|
+
}}
|
|
594
|
+
''',
|
|
595
|
+
"variables": update_frames_params,
|
|
596
|
+
}
|
|
@@ -572,7 +572,7 @@ class DataService(BaseService):
|
|
|
572
572
|
data_id: str,
|
|
573
573
|
slice_id: str,
|
|
574
574
|
id: str,
|
|
575
|
-
|
|
575
|
+
channels: Union[List[str], UndefinedType, None] = Undefined,
|
|
576
576
|
version: Union[str, UndefinedType, None] = Undefined,
|
|
577
577
|
meta: Union[dict, UndefinedType, None] = Undefined,
|
|
578
578
|
):
|
|
@@ -583,7 +583,7 @@ class DataService(BaseService):
|
|
|
583
583
|
data_id (str): The data id.
|
|
584
584
|
slice_id (str): The slice id.
|
|
585
585
|
id (str): The annotation version id.
|
|
586
|
-
|
|
586
|
+
channels (Union[List[str], UndefinedType, None], optional): The channels. Defaults to Undefined.
|
|
587
587
|
version (Union[str, UndefinedType, None], optional): The version. Defaults to Undefined.
|
|
588
588
|
meta (Union[dict, UndefinedType, None], optional): The meta. Defaults to Undefined.
|
|
589
589
|
|
|
@@ -606,7 +606,7 @@ class DataService(BaseService):
|
|
|
606
606
|
data_id=data_id,
|
|
607
607
|
slice_id=slice_id,
|
|
608
608
|
id=id,
|
|
609
|
-
|
|
609
|
+
channels=channels,
|
|
610
610
|
version=version,
|
|
611
611
|
meta=meta,
|
|
612
612
|
)
|
|
@@ -804,3 +804,34 @@ class DataService(BaseService):
|
|
|
804
804
|
)
|
|
805
805
|
data = Data.model_validate(response)
|
|
806
806
|
return data
|
|
807
|
+
|
|
808
|
+
def update_frames(
|
|
809
|
+
self,
|
|
810
|
+
dataset_id: str,
|
|
811
|
+
data_id: str,
|
|
812
|
+
frames: Union[List[Frame], UndefinedType] = Undefined,
|
|
813
|
+
):
|
|
814
|
+
"""Update frames of selected data.
|
|
815
|
+
Args:
|
|
816
|
+
dataset_id (str): dataset id which the data belongs to
|
|
817
|
+
data_id (str): data id to be updated
|
|
818
|
+
frames (list[Frame]): list of frames to be updated
|
|
819
|
+
|
|
820
|
+
Returns:
|
|
821
|
+
Data: The updated data.
|
|
822
|
+
"""
|
|
823
|
+
if dataset_id is None:
|
|
824
|
+
raise BadParameterError("dataset_id is required.")
|
|
825
|
+
if data_id is None:
|
|
826
|
+
raise BadParameterError("data_id is required.")
|
|
827
|
+
|
|
828
|
+
response = self.request_gql(
|
|
829
|
+
Queries.UPDATE_FRAMES,
|
|
830
|
+
Queries.UPDATE_FRAMES["variables"](
|
|
831
|
+
dataset_id=dataset_id,
|
|
832
|
+
data_id=data_id,
|
|
833
|
+
frames=frames,
|
|
834
|
+
)
|
|
835
|
+
)
|
|
836
|
+
data = Data.model_validate(response)
|
|
837
|
+
return data
|
|
@@ -6,6 +6,7 @@ from .data.entities import (
|
|
|
6
6
|
Prediction,
|
|
7
7
|
DataMeta,
|
|
8
8
|
DataSlice,
|
|
9
|
+
Frame,
|
|
9
10
|
)
|
|
10
11
|
from .datasets.entities import Dataset
|
|
11
12
|
from .slices.entities import Slice
|
|
@@ -41,6 +42,7 @@ __all__ = [
|
|
|
41
42
|
"ActivityHistory",
|
|
42
43
|
"Export",
|
|
43
44
|
"Content",
|
|
45
|
+
"Frame",
|
|
44
46
|
|
|
45
47
|
# Enums
|
|
46
48
|
"DataType",
|