@@ -409,26 +409,6 @@ def create_user_bucket(user_id: str) -> Tuple[str, str, str]:
409409 return user_bucket_name , "ga4gh-tes" , config ["USER_BUCKETS_REGION" ], kms_key_arn
410410
411411
412- def _get_user_bucket_if_present (user_id : str ) -> Optional [str ]:
413- """
414- Return the user's bucket name if it exists in S3, else None.
415-
416- Derives the bucket name from the user_id and checks its existence
417- using a HeadBucket call. Raises for any AWS errors other than
418- bucket-not-found.
419- """
420- bucket = get_bucket_name_from_user_id (user_id )
421- try :
422- s3_client .head_bucket (Bucket = bucket )
423- return bucket
424- except ClientError as e :
425- code = e .response .get ("Error" , {}).get ("Code" )
426- if code == "404" :
427- logger .warning (f"Bucket '{ bucket } ' not found for user '{ user_id } '." )
428- return None
429- raise
430-
431-
432412def get_all_bucket_objects (user_bucket_name : str ) -> list :
433413 """
434414 Get all objects from the specified S3 bucket.
@@ -492,41 +472,44 @@ def delete_all_bucket_objects(user_id: str, user_bucket_name: str) -> None:
492472 raise Exception (response )
493473
494474
495- def empty_user_bucket (user_id : str ) -> Optional [str ]:
496- bucket = _get_user_bucket_if_present (user_id )
497- if not bucket :
498- return None
499- try :
500- delete_all_bucket_objects (user_id , bucket )
501- except Exception as e :
502- logger .error (
503- f"Failed to empty the bucket: '{ bucket } ' for user '{ user_id } ': { e } "
504- )
505- raise
506- return bucket
507-
508-
509- def delete_user_bucket (user_id : str ) -> Union [str , None ]:
475+ def cleanup_user_bucket (user_id : str , delete_bucket : bool = False ) -> Union [str , None ]:
510476 """
511- Deletes all objects from a user's S3 bucket before deleting the bucket itself .
477+ Empty a user's S3 bucket and optionally delete the bucket.
512478
513479 Args:
514- user_id (str): The user's unique Gen3 ID
480+ user_id: User identifier used to derive the bucket name.
481+ delete_bucket: If True, delete the bucket after removing all objects.
482+ Defaults to False (only objects are removed).
483+
484+ Returns:
485+ Bucket name if it exists and cleanup was performed, otherwise None
486+ if the bucket does not exist.
515487
516488 Raises:
517- Exception: If there is an error during the deletion process .
489+ Exception: Propagates unexpected errors during cleanup or deletion .
518490 """
519- user_bucket_name = _get_user_bucket_if_present (user_id )
520- logger .info (f"Deleting bucket '{ user_bucket_name } ' for user '{ user_id } '" )
521- if not user_bucket_name :
522- return None
491+ user_bucket_name = get_bucket_name_from_user_id (user_id )
492+
493+ try :
494+ s3_client .head_bucket (Bucket = user_bucket_name )
495+ except ClientError as e :
496+ error_code = e .response ["Error" ]["Code" ]
497+ if error_code == "404" :
498+ logger .warning (
499+ f"Bucket '{ user_bucket_name } ' not found for user '{ user_id } '."
500+ )
501+ return None
523502 try :
524503 delete_all_bucket_objects (user_id , user_bucket_name )
525- s3_client .delete_bucket (Bucket = user_bucket_name )
504+ if delete_bucket :
505+ logger .info (
506+ f"Initializing delete for bucket '{ user_bucket_name } ' for user '{ user_id } '"
507+ )
508+ s3_client .delete_bucket (Bucket = user_bucket_name )
526509 return user_bucket_name
527510
528511 except Exception as e :
529512 logger .error (
530- f"Failed to delete bucket '{ user_bucket_name } ' for user '{ user_id } ': { e } "
513+ f"Failed to cleanup bucket '{ user_bucket_name } ' for user '{ user_id } ': { e } "
531514 )
532515 raise
0 commit comments