@@ -82,6 +82,35 @@ def get_folder_metadata(project, folder_name):
8282 return res
8383
8484
85+ def get_project_and_folder_metadata (project ):
86+ if isinstance (project , dict ):
87+ project = project
88+ folder = None
89+ elif isinstance (project , tuple ):
90+ if len (project ) != 2 :
91+ raise SAIncorrectProjectArgument (project )
92+ project , folder = project
93+ if not isinstance (project , dict ):
94+ raise SAIncorrectProjectArgument (project )
95+ if folder is not None and not isinstance (project , dict ):
96+ raise SAIncorrectProjectArgument (project )
97+ elif isinstance (project , str ):
98+ parts = project .split ('/' )
99+ if len (parts ) == 1 :
100+ project_name = parts [0 ]
101+ project = get_project_metadata_bare (project_name )
102+ folder = None
103+ elif len (parts ) == 2 :
104+ project_name , folder_name = parts
105+ project = get_project_metadata_bare (project_name )
106+ folder = get_folder_metadata (project , folder_name )
107+ else :
108+ raise SAIncorrectProjectArgument (project )
109+ else :
110+ raise SAIncorrectProjectArgument (project )
111+ return project , folder
112+
113+
85114def search_folders (project , folder_name = None , return_metadata = False ):
86115 if not isinstance (project , dict ):
87116 project = get_project_metadata_bare (project )
@@ -213,30 +242,27 @@ def rename_folder(project, new_folder_name):
213242 )
214243
215244
216- def get_project_and_folder_metadata (project ):
217- if isinstance (project , dict ):
218- project = project
219- folder = None
220- elif isinstance (project , tuple ):
221- if len (project ) != 2 :
222- raise SAIncorrectProjectArgument (project )
223- project , folder = project
224- if not isinstance (project , dict ):
225- raise SAIncorrectProjectArgument (project )
226- if folder is not None and not isinstance (project , dict ):
227- raise SAIncorrectProjectArgument (project )
228- elif isinstance (project , str ):
229- parts = project .split ('/' )
230- if len (parts ) == 1 :
231- project_name = parts [0 ]
232- project = get_project_metadata_bare (project_name )
233- folder = None
234- elif len (parts ) == 2 :
235- project_name , folder_name = parts
236- project = get_project_metadata_bare (project_name )
237- folder = get_folder_metadata (project , folder_name )
238- else :
239- raise SAIncorrectProjectArgument (project )
240- else :
241- raise SAIncorrectProjectArgument (project )
242- return project , folder
245+ def set_images_annotation_statuses (project , image_names , annotation_status ):
246+ NUM_TO_SEND = 500
247+ project , project_folder = get_project_and_folder_metadata (project )
248+ params = {"team_id" : project ["team_id" ], "project_id" : project ["id" ]}
249+ annotation_status = common .annotation_status_str_to_int (annotation_status )
250+ data = {
251+ "annotation_status" : annotation_status ,
252+ "folder_id" : project_folder ["id" ]
253+ }
254+ for start_index in range (0 , len (image_names ), NUM_TO_SEND ):
255+ end_index = min (start_index + NUM_TO_SEND , len (image_names ))
256+ data ["image_names" ] = image_names [start_index :end_index ]
257+ response = _api .send_request (
258+ req_type = 'PUT' ,
259+ path = f'/image/updateAnnotationStatusBulk' ,
260+ params = params ,
261+ json_req = data
262+ )
263+ if not response .ok :
264+ raise SABaseException (
265+ response .status_code ,
266+ "Couldn't change annotation statuses " + response .text
267+ )
268+ logger .info ("Annotations status changed" )
0 commit comments