Skip to content

Commit f0ea3ae

Browse files
authored
Merge pull request #196 from superannotateai/s3_annotations
Fix s3_annotations upload
2 parents 4d77db5 + fa2ec0c commit f0ea3ae

File tree

4 files changed

+43
-17
lines changed

4 files changed

+43
-17
lines changed

src/superannotate/lib/app/helpers.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,13 @@ def get_s3_annotation_paths(folder_path, s3_bucket, annotation_paths, recursive)
7272
paginator = s3_client.get_paginator("list_objects_v2")
7373
for data in paginator.paginate(Bucket=s3_bucket, Prefix=folder_path):
7474
for annotation in data["Contents"]:
75-
if annotation["Key"].endswith(VECTOR_ANNOTATION_POSTFIX) or annotation[
76-
"Key"
77-
].endswith(PIXEL_ANNOTATION_POSTFIX):
78-
annotation_paths.append(annotation["Key"])
75+
key = annotation["Key"]
76+
if key.endswith(VECTOR_ANNOTATION_POSTFIX) or key.endswith(
77+
PIXEL_ANNOTATION_POSTFIX
78+
):
79+
if not recursive and "/" in key[len(folder_path) + 1 :]:
80+
continue
81+
annotation_paths.append(key)
7982
return list(set(annotation_paths))
8083

8184

src/superannotate/lib/core/usecases.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,13 @@ def validate_project_name(self):
184184
condition = Condition("name", self._project.name, EQ) & Condition(
185185
"team_id", self._project.team_id, EQ
186186
)
187-
if self._projects.get_all(condition):
188-
logger.error("There are duplicated names.")
189-
raise AppValidationException(
190-
f"Project name {self._project.name} is not unique. "
191-
f"To use SDK please make project names unique."
192-
)
187+
for project in self._projects.get_all(condition):
188+
if project.name == self._project.name:
189+
logger.error("There are duplicated names.")
190+
raise AppValidationException(
191+
f"Project name {self._project.name} is not unique. "
192+
f"To use SDK please make project names unique."
193+
)
193194

194195
def validate_description(self):
195196
if not self._project.description:

tests/integration/test_project_rename.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,34 @@ class TestProjectRename(BaseTestCase):
1010
REPLACED_PROJECT_NAME = "_ _ _ _ _ _ _ _ _"
1111
BAD_PROJECT_NAME = '/ \ : * ? " < > |'
1212

13+
def setUp(self, *args, **kwargs):
14+
self.tearDown()
15+
16+
self._project = sa.create_project(
17+
self.PROJECT_NAME, self.PROJECT_DESCRIPTION, self.PROJECT_TYPE
18+
)
19+
20+
def tearDown(self) -> None:
21+
projects = sa.search_projects(self.PROJECT_NAME, return_metadata=True)
22+
for project in projects:
23+
sa.delete_project(project)
24+
25+
try:
26+
sa.delete_project(self.NEW_PROJECT_NAME)
27+
except Exception as _:
28+
pass
29+
30+
try:
31+
sa.delete_project(self.REPLACED_PROJECT_NAME)
32+
except Exception as _:
33+
pass
34+
1335
def test_project_rename(self):
1436
sa.rename_project(self.PROJECT_NAME, self.NEW_PROJECT_NAME)
1537
meta = sa.get_project_metadata(self.NEW_PROJECT_NAME)
1638
assert meta["name"] == self.NEW_PROJECT_NAME
17-
sa.delete_project(self.NEW_PROJECT_NAME)
1839

1940
def test_rename_with_special_characters(self):
2041
sa.rename_project(self.PROJECT_NAME, self.BAD_PROJECT_NAME)
2142
sa.get_project_metadata(self.REPLACED_PROJECT_NAME)
22-
sa.delete_project(self.REPLACED_PROJECT_NAME)
2343

tests/integration/test_recursive_folder.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -279,13 +279,15 @@ def test_images_recursive_s3_122(self):
279279

280280
def test_annotations_recursive_s3_122(self):
281281
sa.upload_images_from_folder_to_project(self.PROJECT_NAME, '8sep', from_s3_bucket="superannotate-python-sdk-test",recursive_subfolders=True)
282-
sa.upload_annotations_from_folder_to_project(self.PROJECT_NAME, '8sep', from_s3_bucket="superannotate-python-sdk-test",recursive_subfolders=True)
283-
annotations = sa.get_image_annotations(self.PROJECT_NAME,"e13cb60a2bf31c22d2524518b7444f92e37fe5d404b0144390f8c078a0eabd_640.jpg")[
284-
"annotation_json"
285-
]
286-
self.assertEqual(len(annotations['instances']),1)
282+
uploaded = sa.upload_annotations_from_folder_to_project(self.PROJECT_NAME, '8sep', from_s3_bucket="superannotate-python-sdk-test",recursive_subfolders=True)
283+
self.assertEqual(len(uploaded[0]),132)
287284

288285

286+
def test_annotations_recursive_s3_10(self):
287+
sa.upload_images_from_folder_to_project(self.PROJECT_NAME, '8sep', from_s3_bucket="superannotate-python-sdk-test",recursive_subfolders=False)
288+
uploaded = sa.upload_annotations_from_folder_to_project(self.PROJECT_NAME, '8sep', from_s3_bucket="superannotate-python-sdk-test",recursive_subfolders=False)
289+
self.assertEqual(len(uploaded[0]),10)
290+
289291
def test_images_non_recursive(self):
290292
sa.upload_images_from_folder_to_project(
291293
self.PROJECT_NAME, self.folder_path, recursive_subfolders=False

0 commit comments

Comments
 (0)