diff --git a/src/superannotate/lib/app/interface/sdk_interface.py b/src/superannotate/lib/app/interface/sdk_interface.py index ee9403039..3a9387e2a 100644 --- a/src/superannotate/lib/app/interface/sdk_interface.py +++ b/src/superannotate/lib/app/interface/sdk_interface.py @@ -96,6 +96,8 @@ "Vector", "Video", "Document", + "Tiled", + "PointCloud", "Multimodal", ] @@ -1407,7 +1409,7 @@ def create_project( :param project_description: The new project's description. :type project_description: str - :param project_type: The project type. Supported types: 'Vector', 'Video', 'Document', 'Multimodal'. + :param project_type: The project type. Supported types: 'Vector', 'Video', 'Document', 'Tiled', 'PointCloud', 'Multimodal'. :type project_type: str :param settings: list of settings objects diff --git a/tests/integration/aggregations/test_df_processing.py b/tests/integration/aggregations/test_df_processing.py index b401351dc..321b1379a 100644 --- a/tests/integration/aggregations/test_df_processing.py +++ b/tests/integration/aggregations/test_df_processing.py @@ -30,8 +30,7 @@ def test_filter_instances(self): def test_invalid_project_type(self): with self.assertRaisesRegex( - AppException, - "Input should be 'Vector', 'Video', 'Document' or 'Multimodal'", + AppException, "The function is not supported for PointCloud projects." ): sa.aggregate_annotations_as_df(self.folder_path, "PointCloud") diff --git a/tests/integration/export/test_export.py b/tests/integration/export/test_export.py index 25ddb215e..b97c844e7 100644 --- a/tests/integration/export/test_export.py +++ b/tests/integration/export/test_export.py @@ -65,10 +65,10 @@ def setUpClass(cls) -> None: @classmethod def tearDownClass(cls) -> None: - projects = sa.list_projects(name=cls.PROJECT_NAME) + projects = sa.search_projects(cls.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) + sa.delete_project(project) except AppException as e: logging.error(e) diff --git a/tests/integration/items/test_attach_category.py b/tests/integration/items/test_attach_category.py index 965be3405..4515be1c7 100644 --- a/tests/integration/items/test_attach_category.py +++ b/tests/integration/items/test_attach_category.py @@ -66,11 +66,11 @@ def setUpClass(cls, *args, **kwargs) -> None: @classmethod def tearDownClass(cls) -> None: # cleanup test scores and project - projects = sa.list_projects(name__in=[cls.PROJECT_NAME]) + projects = sa.search_projects(cls.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) - except Exception as _: + sa.delete_project(project) + except Exception: pass @staticmethod diff --git a/tests/integration/items/test_generate_items.py b/tests/integration/items/test_generate_items.py index 352c80e8e..9f895bab2 100644 --- a/tests/integration/items/test_generate_items.py +++ b/tests/integration/items/test_generate_items.py @@ -27,7 +27,6 @@ class TestGenerateItemsMM(TestCase): } def setUp(self, *args, **kwargs): - self.tearDown() sa.create_project( self.PROJECT_NAME, self.PROJECT_DESCRIPTION, @@ -38,10 +37,10 @@ def setUp(self, *args, **kwargs): def tearDown(self) -> None: try: - projects = sa.list_projects(name=self.PROJECT_NAME) + projects = sa.search_projects(self.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) + sa.delete_project(project) except Exception as e: print(str(e)) except Exception as e: diff --git a/tests/integration/mixpanel/test_mixpanel_decorator.py b/tests/integration/mixpanel/test_mixpanel_decorator.py index 855bf3c4b..52f96614f 100644 --- a/tests/integration/mixpanel/test_mixpanel_decorator.py +++ b/tests/integration/mixpanel/test_mixpanel_decorator.py @@ -44,10 +44,10 @@ def tearDownClass(cls) -> None: @classmethod def _safe_delete_project(cls, project_name): - projects = sa.list_projects(name=project_name) + projects = sa.search_projects(project_name, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) + sa.delete_project(project) except Exception: raise diff --git a/tests/integration/projects/test_create_project.py b/tests/integration/projects/test_create_project.py index 5dcf04a6c..ef5e604b0 100644 --- a/tests/integration/projects/test_create_project.py +++ b/tests/integration/projects/test_create_project.py @@ -95,7 +95,7 @@ def test_create_project_datetime(self): def test_create_project_with_wrong_type(self): with self.assertRaisesRegex( AppException, - "Input should be 'Vector', 'Video', 'Document' or 'Multimodal'", + "Input should be 'Vector', 'Video', 'Document', 'Tiled', 'PointCloud' or 'Multimodal'", ): sa.create_project(self.PROJECT, "desc", "wrong_type") @@ -130,13 +130,6 @@ def test_create_project_with_classes_and_workflows(self): assert steps[1]["attribute"][0]["attribute"]["name"] == "Track" assert steps[1]["attribute"][1]["attribute"]["name"] == "Bus" - def test_deprecated_project_crate(self): - error_msg = "Input should be 'Vector', 'Video', 'Document' or 'Multimodal'" - with self.assertRaisesRegex(AppException, error_msg): - sa.create_project(self.PROJECT, "desc", "Tiled") - with self.assertRaisesRegex(AppException, error_msg): - sa.create_project(self.PROJECT, "desc", "PointCloud") - class TestCreateVideoProject(ProjectCreateBaseTestCase): PROJECT = "test_video_project" diff --git a/tests/integration/projects/test_project_rename.py b/tests/integration/projects/test_project_rename.py index 1a58068aa..d63eebede 100644 --- a/tests/integration/projects/test_project_rename.py +++ b/tests/integration/projects/test_project_rename.py @@ -20,17 +20,16 @@ def setUp(self, *args, **kwargs): ) def tearDown(self) -> None: - projects = sa.list_projects( - name__in=[ - self.PROJECT_NAME, - self.NEW_PROJECT_NAME, - self.REPLACED_PROJECT_NAME, - self.NAME_TO_RENAME, - ] + projects = [] + projects.extend(sa.search_projects(self.PROJECT_NAME, return_metadata=True)) + projects.extend(sa.search_projects(self.NEW_PROJECT_NAME, return_metadata=True)) + projects.extend( + sa.search_projects(self.REPLACED_PROJECT_NAME, return_metadata=True) ) + projects.extend(sa.search_projects(self.NAME_TO_RENAME, return_metadata=True)) for project in projects: try: - sa.delete_project(project=project["id"]) + sa.delete_project(project) except Exception as _: pass diff --git a/tests/integration/projects/test_search_project.py b/tests/integration/projects/test_search_project.py index 3a9036338..f96736061 100644 --- a/tests/integration/projects/test_search_project.py +++ b/tests/integration/projects/test_search_project.py @@ -22,17 +22,19 @@ def setUp(self, *args, **kwargs): ) def tearDown(self) -> None: - projects = sa.list_projects( - name__in=[ - self.PROJECT_NAME, - self.PROJECT_NAME_2, - self.REPLACED_PROJECT_NAME, - self.PROJECT_NAME_CONTAIN_SPECIAL_CHARACTER, - ] + projects = [] + projects.extend(sa.search_projects(self.PROJECT_NAME, return_metadata=True)) + projects.extend( + sa.search_projects(self.REPLACED_PROJECT_NAME, return_metadata=True) + ) + projects.extend( + sa.search_projects( + self.PROJECT_NAME_CONTAIN_SPECIAL_CHARACTER, return_metadata=True + ) ) for project in projects: try: - sa.delete_project(project=project["id"]) + sa.delete_project(project) except Exception as _: pass diff --git a/tests/integration/settings/test_settings.py b/tests/integration/settings/test_settings.py index 60abbff96..8fc9ee145 100644 --- a/tests/integration/settings/test_settings.py +++ b/tests/integration/settings/test_settings.py @@ -15,14 +15,16 @@ def setUp(self) -> None: self.tearDown() def tearDown(self) -> None: - projects = sa.list_projects( - name__in=[self.PROJECT_NAME, self.SECOND_PROJECT_NAME] - ) - for project in projects: - try: - sa.delete_project(project=project["id"]) - except Exception as _: - pass + try: + projects = sa.list_projects(name=self.PROJECT_NAME) + projects.extend(sa.list_projects(name=self.SECOND_PROJECT_NAME)) + for project in projects: + try: + sa.delete_project(project=project["id"]) + except Exception: + pass + except Exception as e: + print(str(e)) class TestSettings(BaseTestCase): diff --git a/tests/integration/test_cli.py b/tests/integration/test_cli.py index 55dc8ab7f..f95fd8e72 100644 --- a/tests/integration/test_cli.py +++ b/tests/integration/test_cli.py @@ -37,12 +37,9 @@ def setUp(self, *args, **kwargs): self.tearDown() def tearDown(self) -> None: - projects = sa.list_projects(name__in=[self.PROJECT_NAME]) + projects = sa.search_projects(self.PROJECT_NAME, return_metadata=True) for project in projects: - try: - sa.delete_project(project=project["id"]) - except Exception as _: - pass + sa.delete_project(project) @property def convertor_data_path(self): diff --git a/tests/integration/test_depricated_functions_document.py b/tests/integration/test_depricated_functions_document.py index 46bc0d0c9..f61c603ef 100644 --- a/tests/integration/test_depricated_functions_document.py +++ b/tests/integration/test_depricated_functions_document.py @@ -40,12 +40,13 @@ def setUp(self, *args, **kwargs): ) def tearDown(self) -> None: - projects = sa.list_projects(name__in=[self.PROJECT_NAME, self.PROJECT_NAME_2]) + projects = sa.search_projects(self.PROJECT_NAME, return_metadata=True) for project in projects: - try: - sa.delete_project(project=project["id"]) - except Exception as _: - pass + sa.delete_project(project) + + projects = sa.search_projects(self.PROJECT_NAME_2, return_metadata=True) + for project in projects: + sa.delete_project(project) @property def video_export_path(self): diff --git a/tests/integration/test_depricated_functions_video.py b/tests/integration/test_depricated_functions_video.py index 02fb3f800..a60926f2b 100644 --- a/tests/integration/test_depricated_functions_video.py +++ b/tests/integration/test_depricated_functions_video.py @@ -38,12 +38,10 @@ def setUp(self, *args, **kwargs): ) def tearDown(self) -> None: - projects = sa.list_projects(name__in=[self.PROJECT_NAME, self.PROJECT_NAME_2]) + projects = sa.search_projects(self.PROJECT_NAME, return_metadata=True) + projects.extend(sa.search_projects(self.PROJECT_NAME_2, return_metadata=True)) for project in projects: - try: - sa.delete_project(project=project["id"]) - except Exception as _: - pass + sa.delete_project(project) @property def video_export_path(self): diff --git a/tests/integration/test_video.py b/tests/integration/test_video.py index 6ff1e0bfa..e47000a0f 100644 --- a/tests/integration/test_video.py +++ b/tests/integration/test_video.py @@ -45,14 +45,10 @@ def setUp(self, *args, **kwargs): ) def tearDown(self) -> None: - projects = sa.list_projects( - name__in=[self.PROJECT_NAME, self.SECOND_PROJECT_NAME] - ) - for project in projects: - try: - sa.delete_project(project=project["id"]) - except Exception as _: - pass + for project_name in (self.PROJECT_NAME, self.SECOND_PROJECT_NAME): + projects = sa.search_projects(project_name, return_metadata=True) + for project in projects: + sa.delete_project(project) def test_videos_upload_from_folder(self): res = sa.upload_videos_from_folder_to_project( diff --git a/tests/integration/tiled_project/test_tiled_project.py b/tests/integration/tiled_project/test_tiled_project.py new file mode 100644 index 000000000..12517fa96 --- /dev/null +++ b/tests/integration/tiled_project/test_tiled_project.py @@ -0,0 +1,14 @@ +from src.superannotate import SAClient +from tests.integration.base import BaseTestCase + +sa = SAClient() + + +class TestTiledProject(BaseTestCase): + PROJECT_NAME = "TestGetIntegrations" + PROJECT_DESCRIPTION = "desc" + PROJECT_TYPE = "Tiled" + + def test_get_metadata(self): + self._attach_items() + assert all(i["metadata"]["name"] for i in sa.get_annotations(self.PROJECT_NAME)) diff --git a/tests/integration/work_management/test_contributors_categories.py b/tests/integration/work_management/test_contributors_categories.py index 313ef841b..fdeb82a91 100644 --- a/tests/integration/work_management/test_contributors_categories.py +++ b/tests/integration/work_management/test_contributors_categories.py @@ -74,11 +74,11 @@ def setUpClass(cls, *args, **kwargs) -> None: @classmethod def tearDownClass(cls) -> None: - projects = sa.list_projects(name__in=[cls.PROJECT_NAME]) + projects = sa.search_projects(cls.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) - except Exception as _: + sa.delete_project(project) + except Exception: pass def tearDown(self): diff --git a/tests/integration/work_management/test_project_categories.py b/tests/integration/work_management/test_project_categories.py index 7b86b745d..1d873de73 100644 --- a/tests/integration/work_management/test_project_categories.py +++ b/tests/integration/work_management/test_project_categories.py @@ -67,11 +67,11 @@ def setUpClass(cls, *args, **kwargs) -> None: @classmethod def tearDownClass(cls) -> None: # cleanup test scores and project - projects = sa.list_projects(name__in=[cls.PROJECT_NAME]) + projects = sa.search_projects(cls.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) - except Exception as _: + sa.delete_project(project) + except Exception: pass def test_project_categories_flow(self): diff --git a/tests/integration/work_management/test_project_user_permissions.py b/tests/integration/work_management/test_project_user_permissions.py index 0a3593db8..ed0f044a3 100644 --- a/tests/integration/work_management/test_project_user_permissions.py +++ b/tests/integration/work_management/test_project_user_permissions.py @@ -29,11 +29,11 @@ def setUpClass(cls, *args, **kwargs) -> None: @classmethod def tearDownClass(cls) -> None: - projects = sa.list_projects(name__in=[cls.PROJECT_NAME]) + projects = sa.search_projects(cls.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) - except Exception as _: + sa.delete_project(project) + except Exception: pass def tearDown(self): diff --git a/tests/integration/work_management/test_user_scoring.py b/tests/integration/work_management/test_user_scoring.py index 3363d44e6..fee2a2371 100644 --- a/tests/integration/work_management/test_user_scoring.py +++ b/tests/integration/work_management/test_user_scoring.py @@ -91,11 +91,11 @@ def setUpClass(cls, *args, **kwargs) -> None: @classmethod def tearDownClass(cls) -> None: # cleanup test scores and project - projects = sa.list_projects(name__in=[cls.PROJECT_NAME]) + projects = sa.search_projects(cls.PROJECT_NAME, return_metadata=True) for project in projects: try: - sa.delete_project(project=project["id"]) - except Exception as _: + sa.delete_project(project) + except Exception: pass score_templates_name_id_map = {