From 8c3e33221b289dc2bb2525c0286ad85b1688f4f5 Mon Sep 17 00:00:00 2001 From: Narek Mkhitaryan Date: Wed, 1 Mar 2023 18:43:38 +0400 Subject: [PATCH 1/3] fix clone_project upload_state issue --- src/superannotate/lib/app/interface/sdk_interface.py | 2 ++ tests/integration/projects/test_clone_project.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/superannotate/lib/app/interface/sdk_interface.py b/src/superannotate/lib/app/interface/sdk_interface.py index 0a4349882..03858a5a4 100644 --- a/src/superannotate/lib/app/interface/sdk_interface.py +++ b/src/superannotate/lib/app/interface/sdk_interface.py @@ -475,6 +475,8 @@ def clone_project( f"Workflow is not supported in {project.type.name} project." ) project_copy = copy.copy(project) + if project_copy.type in (constants.ProjectType.VECTOR, constants.ProjectType.PIXEL,): + project_copy.upload_state = constants.UploadState.INITIAL if project_description: project_copy.description = project_description else: diff --git a/tests/integration/projects/test_clone_project.py b/tests/integration/projects/test_clone_project.py index 64cdf2b8b..3d9d91edd 100644 --- a/tests/integration/projects/test_clone_project.py +++ b/tests/integration/projects/test_clone_project.py @@ -89,7 +89,7 @@ def test_clone_project(self): copy_annotation_classes=True, ) self.assertEqual( - new_project["upload_state"], constances.UploadState.EXTERNAL.name + new_project["upload_state"], constances.UploadState.INITIAL.name ) new_settings = sa.get_project_settings(self.PROJECT_NAME_2) for setting in new_settings: From c8be2019b37883cc0b099b71129bd43373348eaf Mon Sep 17 00:00:00 2001 From: Narek Mkhitaryan Date: Wed, 1 Mar 2023 19:06:40 +0400 Subject: [PATCH 2/3] fix clone_project upload_state issue (pre_commit) --- docs/source/api_reference/api_annotation.rst | 2 +- .../lib/app/interface/sdk_interface.py | 17 +++++++++++++---- src/superannotate/lib/core/usecases/projects.py | 4 ++-- .../integration/projects/test_clone_project.py | 2 +- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/source/api_reference/api_annotation.rst b/docs/source/api_reference/api_annotation.rst index 454f4f64e..7f10d63c8 100644 --- a/docs/source/api_reference/api_annotation.rst +++ b/docs/source/api_reference/api_annotation.rst @@ -9,4 +9,4 @@ Annotations .. automethod:: superannotate.SAClient.set_annotation_statuses .. automethod:: superannotate.SAClient.delete_annotations .. _ref_upload_annotations_from_folder_to_project: -.. automethod:: superannotate.SAClient.upload_annotations_from_folder_to_project \ No newline at end of file +.. automethod:: superannotate.SAClient.upload_annotations_from_folder_to_project diff --git a/src/superannotate/lib/app/interface/sdk_interface.py b/src/superannotate/lib/app/interface/sdk_interface.py index 03858a5a4..c9c51c989 100644 --- a/src/superannotate/lib/app/interface/sdk_interface.py +++ b/src/superannotate/lib/app/interface/sdk_interface.py @@ -359,7 +359,9 @@ def create_project( if invalid_classes: seen = set() seen_add = seen.add - invalid_classes = [i for i in invalid_classes if not (i in seen or seen_add(i))] + invalid_classes = [ + i for i in invalid_classes if not (i in seen or seen_add(i)) + ] raise AppException( f"There are no [{', '.join(invalid_classes)}] classes created in the project." ) @@ -475,7 +477,10 @@ def clone_project( f"Workflow is not supported in {project.type.name} project." ) project_copy = copy.copy(project) - if project_copy.type in (constants.ProjectType.VECTOR, constants.ProjectType.PIXEL,): + if project_copy.type in ( + constants.ProjectType.VECTOR, + constants.ProjectType.PIXEL, + ): project_copy.upload_state = constants.UploadState.INITIAL if project_description: project_copy.description = project_description @@ -503,7 +508,9 @@ def clone_project( project.classes = classes_response.data if copy_workflow: if not copy_annotation_classes: - logger.info(f"Skipping the workflow clone from {from_project} to {project_name}.") + logger.info( + f"Skipping the workflow clone from {from_project} to {project_name}." + ) else: logger.info(f"Cloning workflow from {from_project} to {project_name}.") workflow_response = self.controller.projects.set_workflows( @@ -2176,7 +2183,9 @@ def add_contributors_to_project( """ project = self.controller.projects.get_by_name(project).data contributors = [ - entities.ContributorEntity(user_id=email, user_role=constants.UserRole(role)) + entities.ContributorEntity( + user_id=email, user_role=constants.UserRole(role) + ) for email in emails ] response = self.controller.projects.add_contributors( diff --git a/src/superannotate/lib/core/usecases/projects.py b/src/superannotate/lib/core/usecases/projects.py index 63dbb002d..778594313 100644 --- a/src/superannotate/lib/core/usecases/projects.py +++ b/src/superannotate/lib/core/usecases/projects.py @@ -704,8 +704,8 @@ def execute(self): team_users = set() project_users = {user.user_id for user in self._project.users} for user in self._team.users: - if user['user_role'] > constances.UserRole.ADMIN.value: - team_users.add(user['email']) + if user["user_role"] > constances.UserRole.ADMIN.value: + team_users.add(user["email"]) # collecting pending team users which is not admin for user in self._team.pending_invitations: if user["user_role"] > constances.UserRole.ADMIN.value: diff --git a/tests/integration/projects/test_clone_project.py b/tests/integration/projects/test_clone_project.py index 3d9d91edd..0cbf19c1a 100644 --- a/tests/integration/projects/test_clone_project.py +++ b/tests/integration/projects/test_clone_project.py @@ -211,7 +211,7 @@ def test_clone_video_project(self): ) self.assertEqual(new_project["name"], self.PROJECT_NAME_2) self.assertEqual(new_project["type"].lower(), "video") - self.assertEqual(new_project["description"], self._project_1['description']) + self.assertEqual(new_project["description"], self._project_1["description"]) def test_clone_video_project_frame_mode_on(self): self._project_1 = sa.create_project( From 7c3e8a597ee4c86f74a580da9f17a207a346848d Mon Sep 17 00:00:00 2001 From: Narek Mkhitaryan Date: Wed, 1 Mar 2023 19:21:46 +0400 Subject: [PATCH 3/3] fix clone_project upload_state issue (delete old code) --- src/superannotate/lib/app/interface/sdk_interface.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/superannotate/lib/app/interface/sdk_interface.py b/src/superannotate/lib/app/interface/sdk_interface.py index c9c51c989..6566d961a 100644 --- a/src/superannotate/lib/app/interface/sdk_interface.py +++ b/src/superannotate/lib/app/interface/sdk_interface.py @@ -487,8 +487,6 @@ def clone_project( else: project_copy.description = project.description project_copy.name = project_name - if project.type in (constants.ProjectType.VECTOR, constants.ProjectType.PIXEL): - project.upload_state = enums.UploadState.INITIAL create_response = self.controller.projects.create(project_copy) create_response.raise_for_status() new_project = create_response.data