@@ -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 (
0 commit comments