Skip to content

Commit 6da8514

Browse files
authored
Merge pull request #735 from superannotateai/FRIDAY_2985
Fixed folders duplication
2 parents 078f7ad + 9b393bb commit 6da8514

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed

src/superannotate/lib/core/usecases/annotations.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1937,22 +1937,39 @@ async def run_workers(
19371937
)
19381938

19391939
def get_or_create_folder(self, folder_name: str) -> FolderEntity:
1940-
if folder_name is None:
1940+
"""
1941+
Retrieve an existing folder by name or create it if it doesn't exist.
1942+
1943+
Args:
1944+
folder_name (str): The name of the folder to retrieve or create.
1945+
1946+
Returns:
1947+
FolderEntity: The retrieved or newly created folder entity.
1948+
"""
1949+
if not folder_name:
19411950
return self._root_folder
1951+
19421952
response = self._service_provider.folders.get_by_name(
19431953
self._project, folder_name
19441954
)
1955+
if response.ok:
1956+
return response.data
1957+
1958+
# Handle non-404 errors
19451959
if response.status != 404:
19461960
response.raise_for_status()
1961+
1962+
# Create the folder if it doesn't exist
19471963
response = CreateFolderUseCase(
19481964
project=self._project,
19491965
folder=FolderEntity(name=folder_name),
19501966
service_provider=self._service_provider,
19511967
).execute()
1968+
19521969
if response.errors:
19531970
raise AppException(response.errors)
1954-
else:
1955-
return response.data
1971+
1972+
return response.data
19561973

19571974
def attach_items(
19581975
self, folder: FolderEntity, item_names: List[str]
@@ -1994,10 +2011,18 @@ def serialize_folder_name(val):
19942011
val = val.strip().translate(translation_table)
19952012
return val.lower()
19962013

2014+
@property
2015+
def categorization_enabled(self):
2016+
settings = self._service_provider.projects.list_settings(self._project).data
2017+
for setting in settings:
2018+
if setting.attribute == "CategorizeItems":
2019+
return bool(setting.value)
2020+
return False
2021+
19972022
def execute(self):
19982023
if self.is_valid():
19992024
# TODO check categories status in the project
2000-
skip_categorization = False
2025+
categorization_enabled = self.categorization_enabled
20012026
serialized_original_folder_map = {}
20022027
failed, skipped, uploaded = [], [], []
20032028
# folder_id -> item_name -> annotation
@@ -2071,7 +2096,7 @@ def execute(self):
20712096
{i.item.name for i in items_to_upload}
20722097
- set(failed_annotations).union(skipped)
20732098
)
2074-
if not skip_categorization:
2099+
if categorization_enabled:
20752100
item_id_category_map = {}
20762101
for item_name in uploaded_annotations:
20772102
category = name_annotation_map[item_name]["metadata"].get(

tests/integration/annotations/test_upload_annotations.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ def setUp(self, *args, **kwargs):
163163
],
164164
)
165165
project = sa.controller.get_project(self.PROJECT_NAME)
166-
time.sleep(2)
166+
time.sleep(4)
167167
with open(self.EDITOR_TEMPLATE_PATH) as f:
168168
res = sa.controller.service_provider.projects.attach_editor_template(
169169
sa.controller.team, project, template=json.load(f)
@@ -191,6 +191,10 @@ def test_upload_from_root_to_folder(self):
191191
assert len(response["succeeded"]) == 3
192192
annotations = sa.get_annotations(f"{self.PROJECT_NAME}/test_folder")
193193
assert all([len(i["instances"]) == 3 for i in annotations]) is True
194+
folders = sa.search_folders(self.PROJECT_NAME)
195+
assert len(folders) == 1
196+
sa.upload_annotations(self.PROJECT_NAME, annotations=data)
197+
assert len(folders) == 1
194198

195199
def test_error_upload_from_folder_to_folder_(self):
196200
with open(self.JSONL_ANNOTATIONS_PATH) as f:

0 commit comments

Comments
 (0)