Skip to content

Commit 9452615

Browse files
committed
image copy
1 parent 97f862d commit 9452615

File tree

2 files changed

+70
-7
lines changed

2 files changed

+70
-7
lines changed

superannotate/db/project_images.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,27 @@ def upload_image_to_project(
134134
break
135135

136136

137+
def copy_image_endpoint(img_metadatas, destination_project_folder_id):
138+
params = {
139+
"team_id": _api.team_id,
140+
"project_id": img_metadatas[0]["project_id"]
141+
}
142+
json_req = {
143+
"image_ids": [x["id"] for x in img_metadatas],
144+
"destination_folder_id": destination_project_folder_id
145+
}
146+
response = _api.send_request(
147+
req_type='POST', path='/image/copy', params=params, json_req=json_req
148+
)
149+
if not response.ok:
150+
raise SABaseException(
151+
response.status_code, "Couldn't copy images " + response.text
152+
)
153+
154+
137155
def copy_image(
138156
source_project,
139-
image_name,
157+
image_names,
140158
destination_project,
141159
include_annotations=False,
142160
copy_annotation_status=False,
@@ -159,12 +177,22 @@ def copy_image(
159177
:param copy_pin: enables image pin status copy
160178
:type copy_pin: bool
161179
"""
162-
if not isinstance(source_project, dict):
163-
source_project = get_project_metadata_bare(source_project)
164-
if not isinstance(destination_project, dict):
165-
destination_project = get_project_metadata_bare(destination_project)
166-
img_b = get_image_bytes(source_project, image_name)
167-
img_metadata = get_image_metadata(source_project, image_name)
180+
source_project, source_project_folder = get_project_project_folder_metadata(
181+
source_project
182+
)
183+
destination_project, destination_project_folder = get_project_project_folder_metadata(
184+
destination_project
185+
)
186+
img_metadatas = get_image_metadata(
187+
(source_project, source_project_folder), image_names
188+
)
189+
print(source_project, destination_project)
190+
if source_project["id"] == destination_project["id"]:
191+
copy_image_endpoint(img_metadatas, destination_project_folder["id"])
192+
return
193+
img_b = get_image_bytes(
194+
(source_project, source_project_folder), image_names
195+
)
168196
new_name = image_name
169197
extension = Path(image_name).suffix
170198
p = re.compile(r"_\([0-9]+\)\.")

tests/test_image_copy_move.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
PROJECT_NAME_CPY = "test image copy 1"
66
PROJECT_NAME_CPY_MULT = "test image copy mult 2"
77
PROJECT_NAME_MOVE = "test image move 3"
8+
PROJECT_NAME_CPY_FOLDER = "test image copy folder 4"
89

910

1011
def test_image_copy_mult(tmpdir):
@@ -158,3 +159,37 @@ def test_image_move(tmpdir):
158159

159160
si = sa.search_images(project)
160161
assert len(si) == 1
162+
163+
164+
def test_image_copy_folders(tmpdir):
165+
tmpdir = Path(tmpdir)
166+
167+
projects_found = sa.search_projects(
168+
PROJECT_NAME_CPY_FOLDER, return_metadata=True
169+
)
170+
for pr in projects_found:
171+
sa.delete_project(pr)
172+
173+
project = sa.create_project(PROJECT_NAME_CPY_FOLDER, "test", "Vector")
174+
175+
sa.upload_image_to_project(
176+
project,
177+
"./tests/sample_project_vector/example_image_1.jpg",
178+
annotation_status="InProgress"
179+
)
180+
sa.upload_image_to_project(
181+
project,
182+
"./tests/sample_project_vector/example_image_2.jpg",
183+
annotation_status="InProgress"
184+
)
185+
186+
sa.create_folder(project, "folder1")
187+
188+
sa.copy_image(
189+
project, ["example_image_1.jpg", "example_image_2.jpg"],
190+
project["name"] + "/folder1"
191+
)
192+
sa.copy_image(
193+
project, ["example_image_1.jpg", "example_image_2.jpg"],
194+
project["name"] + "/folder1"
195+
)

0 commit comments

Comments
 (0)