From 0f92ab31a1f15b15f85f0c1303d30a3adf708a75 Mon Sep 17 00:00:00 2001 From: Adrian Chang Date: Wed, 22 May 2024 16:33:04 -0700 Subject: [PATCH 1/2] Clone method --- libs/labelbox/src/labelbox/schema/project.py | 18 ++++++++++++++++++ .../labelbox/tests/integration/test_project.py | 16 ++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index 605da9cce..5829886af 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1803,6 +1803,24 @@ def get_overview(self) -> ProjectOverview: overview["all_in_data_rows"] = overview.pop("all") return ProjectOverview(**overview) + + def clone(self) -> "Project": + """ + Clones the current project. + + Returns: + Project: The cloned project. + """ + mutation = """ + mutation CloneProjectPyApi($projectId: ID!) { + cloneProject(data: { projectId: $projectId }) { + id + } + } + """ + print(self.uid) + result = self.client.execute(mutation, {"projectId": self.uid}) + return self.client.get_project(result["cloneProject"]["id"]) class ProjectMember(DbObject): diff --git a/libs/labelbox/tests/integration/test_project.py b/libs/labelbox/tests/integration/test_project.py index ac21fdda6..85d67a251 100644 --- a/libs/labelbox/tests/integration/test_project.py +++ b/libs/labelbox/tests/integration/test_project.py @@ -279,3 +279,19 @@ def test_label_count(client, configured_batch_project_with_label): [source_project, _, _, _] = configured_batch_project_with_label num_labels = sum([1 for _ in source_project.labels()]) assert source_project.get_label_count() == num_labels + + +def test_clone(client, project, rand_gen): + # cannot clone unknown project media type + project = client.create_project(name=rand_gen(str), media_type=MediaType.Image) + cloned_project = project.clone() + + assert cloned_project.description == project.description + assert cloned_project.media_type == project.media_type + assert cloned_project.queue_mode == project.queue_mode + assert cloned_project.auto_audit_number_of_labels == project.auto_audit_number_of_labels + assert cloned_project.auto_audit_percentage == project.auto_audit_percentage + assert cloned_project.get_label_count() == 0 + + project.delete() + cloned_project.delete() \ No newline at end of file From 63bbed10d6384a736649ba7db7f181c934ecca1b Mon Sep 17 00:00:00 2001 From: Adrian Chang Date: Wed, 22 May 2024 16:35:44 -0700 Subject: [PATCH 2/2] remove print statement --- libs/labelbox/src/labelbox/schema/project.py | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index 5829886af..d0ade090f 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1818,7 +1818,6 @@ def clone(self) -> "Project": } } """ - print(self.uid) result = self.client.execute(mutation, {"projectId": self.uid}) return self.client.get_project(result["cloneProject"]["id"])