@@ -62,22 +62,28 @@ def __poll_for_processed_file(self, run_id, max_wait_time=64):
6262 current_wait_time = 1 # Start with 1 second
6363 try :
6464 while True :
65- response = files_api .get_run (run_id , vault_id = self .__vault_client .get_vault_id (), request_options = self .__get_headers ()).data
66- status = response .status
67- if status == 'IN_PROGRESS' :
68- if current_wait_time >= max_wait_time :
69- return DeidentifyFileResponse (run_id = run_id , status = 'IN_PROGRESS' )
70- else :
71- next_wait_time = current_wait_time * 2
72- if next_wait_time >= max_wait_time :
73- wait_time = max_wait_time - current_wait_time
74- current_wait_time = max_wait_time
65+ http_response = files_api .get_run (run_id , vault_id = self .__vault_client .get_vault_id (), request_options = self .__get_headers ())
66+ try :
67+ response = http_response .data
68+ status = response .status
69+ if status == 'IN_PROGRESS' :
70+ if current_wait_time >= max_wait_time :
71+ return DeidentifyFileResponse (run_id = run_id , status = 'IN_PROGRESS' )
7572 else :
76- wait_time = next_wait_time
77- current_wait_time = next_wait_time
78- time .sleep (wait_time )
79- elif status == 'SUCCESS' or status == 'FAILED' :
80- return response
73+ next_wait_time = current_wait_time * 2
74+ if next_wait_time >= max_wait_time :
75+ wait_time = max_wait_time - current_wait_time
76+ current_wait_time = max_wait_time
77+ else :
78+ wait_time = next_wait_time
79+ current_wait_time = next_wait_time
80+ time .sleep (wait_time )
81+ elif status == 'SUCCESS' or status == 'FAILED' :
82+ # Create a copy of the response data before closing
83+ result = response
84+ return result
85+ finally :
86+ http_response .close ()
8187 except Exception as e :
8288 raise e
8389
@@ -271,7 +277,7 @@ def __get_file_from_request(self, request: DeidentifyFileRequest):
271277
272278 # Check for file_path if file is not provided
273279 if hasattr (file_input , 'file_path' ) and file_input .file_path is not None :
274- return open (file_input .file_path , 'rb' )
280+ return open (file_input .file_path , 'rb' )
275281
276282 def deidentify_file (self , request : DeidentifyFileRequest ):
277283 log_info (SkyflowMessages .Info .DETECT_FILE_TRIGGERED .value , self .__vault_client .get_logger ())
@@ -281,8 +287,19 @@ def deidentify_file(self, request: DeidentifyFileRequest):
281287 file_obj = self .__get_file_from_request (request )
282288 file_name = getattr (file_obj , 'name' , None )
283289 file_extension = self ._get_file_extension (file_name ) if file_name else None
284- file_content = file_obj .read ()
285- base64_string = base64 .b64encode (file_content ).decode ('utf-8' )
290+
291+ # Track if we need to close the file (only if it was opened from file_path)
292+ file_needs_closing = False
293+ file_input = request .file
294+ if hasattr (file_input , 'file_path' ) and file_input .file_path is not None :
295+ file_needs_closing = True
296+
297+ try :
298+ file_content = file_obj .read ()
299+ base64_string = base64 .b64encode (file_content ).decode ('utf-8' )
300+ finally :
301+ if file_needs_closing and hasattr (file_obj , 'close' ):
302+ file_obj .close ()
286303
287304 try :
288305 if file_extension == 'txt' :
@@ -420,16 +437,19 @@ def deidentify_file(self, request: DeidentifyFileRequest):
420437 log_info (SkyflowMessages .Info .DETECT_FILE_REQUEST_RESOLVED .value , self .__vault_client .get_logger ())
421438 api_response = api_call (** api_kwargs )
422439
423- run_id = getattr (api_response .data , 'run_id' , None )
440+ try :
441+ run_id = getattr (api_response .data , 'run_id' , None )
424442
425- processed_response = self .__poll_for_processed_file (run_id , request .wait_time )
426- if request .output_directory and processed_response .status == 'SUCCESS' :
427- name_without_ext , _ = os .path .splitext (file_name )
428- self .__save_deidentify_file_response_output (processed_response , request .output_directory , file_name , name_without_ext )
443+ processed_response = self .__poll_for_processed_file (run_id , request .wait_time )
444+ if request .output_directory and processed_response .status == 'SUCCESS' :
445+ name_without_ext , _ = os .path .splitext (file_name )
446+ self .__save_deidentify_file_response_output (processed_response , request .output_directory , file_name , name_without_ext )
429447
430- parsed_response = self .__parse_deidentify_file_response (processed_response , run_id )
431- log_info (SkyflowMessages .Info .DETECT_FILE_SUCCESS .value , self .__vault_client .get_logger ())
432- return parsed_response
448+ parsed_response = self .__parse_deidentify_file_response (processed_response , run_id )
449+ log_info (SkyflowMessages .Info .DETECT_FILE_SUCCESS .value , self .__vault_client .get_logger ())
450+ return parsed_response
451+ finally :
452+ api_response .close ()
433453
434454 except Exception as e :
435455 log_error_log (SkyflowMessages .ErrorLogs .DETECT_FILE_REQUEST_REJECTED .value ,
@@ -445,17 +465,20 @@ def get_detect_run(self, request: GetDetectRunRequest):
445465 files_api = self .__vault_client .get_detect_file_api ().with_raw_response
446466 run_id = request .run_id
447467 try :
448- response = files_api .get_run (
468+ http_response = files_api .get_run (
449469 run_id ,
450470 vault_id = self .__vault_client .get_vault_id (),
451471 request_options = self .__get_headers ()
452472 )
453- if response .data .status == 'IN_PROGRESS' :
454- parsed_response = self .__parse_deidentify_file_response (DeidentifyFileResponse (run_id = run_id , status = 'IN_PROGRESS' ))
455- else :
456- parsed_response = self .__parse_deidentify_file_response (response .data , run_id , response .data .status )
457- log_info (SkyflowMessages .Info .GET_DETECT_RUN_SUCCESS .value ,self .__vault_client .get_logger ())
458- return parsed_response
473+ try :
474+ if http_response .data .status == 'IN_PROGRESS' :
475+ parsed_response = self .__parse_deidentify_file_response (DeidentifyFileResponse (run_id = run_id , status = 'IN_PROGRESS' ))
476+ else :
477+ parsed_response = self .__parse_deidentify_file_response (http_response .data , run_id , http_response .data .status )
478+ log_info (SkyflowMessages .Info .GET_DETECT_RUN_SUCCESS .value ,self .__vault_client .get_logger ())
479+ return parsed_response
480+ finally :
481+ http_response .close ()
459482 except Exception as e :
460483 log_error_log (SkyflowMessages .ErrorLogs .DETECT_FILE_REQUEST_REJECTED .value ,
461484 self .__vault_client .get_logger ())
0 commit comments