Skip to content

Commit f555070

Browse files
sbulageizapolsk
authored andcommitted
[RFR]This PR will add list_s3_bucket method and forcefully remove the Bucket. (#345)
* This PR will add `list_s3_bucket` method and forcefully remove the Bucket if it is not empty. * Use existing object_delete and delete all fuctionality. * Minor Updates: Object iterable check,Exception handled, Updated key Deletion. * Updated code by taking list values in argument. * Minor updates with exception and naming convention * Fixed Bucket names instead of Bucket obj.
1 parent cf5515a commit f555070

1 file changed

Lines changed: 23 additions & 11 deletions

File tree

wrapanapi/systems/ec2.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -784,6 +784,9 @@ def create_s3_bucket(self, bucket_name):
784784
self.logger.exception("Error: Bucket was not successfully created.")
785785
return False
786786

787+
def list_s3_bucket_names(self):
788+
return [bucket.name for bucket in self.s3_connection.buckets.all()]
789+
787790
def upload_file_to_s3_bucket(self, bucket_name, file_path, file_name):
788791
bucket = self.s3_connection.Bucket(bucket_name)
789792
self.logger.info("uploading file '%s' to bucket: '%s'", file_path, bucket_name)
@@ -804,17 +807,26 @@ def object_exists_in_bucket(self, bucket_name, object_key):
804807
objects = [o for o in bucket.objects.all() if o.key == object_key]
805808
return any(objects)
806809

807-
def delete_s3_bucket(self, bucket_name):
808-
"""TODO: Force delete - delete all objects and then bucket"""
809-
bucket = self.s3_connection.Bucket(bucket_name)
810-
self.logger.info("Trying to delete bucket '%s'", bucket_name)
811-
try:
812-
bucket.delete()
813-
self.logger.info("Success: bucket '%s' was deleted.", bucket_name)
814-
return True
815-
except Exception:
816-
self.logger.exception("Bucket '%s' deletion failed", bucket_name)
817-
return False
810+
def delete_s3_buckets(self, bucket_names):
811+
""" Deletes specified bucket(s) with keys """
812+
deleted_list = []
813+
if isinstance(bucket_names, (set, list, tuple)):
814+
buckets = [self.s3_connection.Bucket(obj_name) for obj_name in bucket_names]
815+
else:
816+
raise ValueError("Object is not iterable.")
817+
for bucket in buckets:
818+
self.logger.info("Trying to delete bucket '%s'", bucket.anem)
819+
keys = [obj.key for obj in bucket.objects.all()]
820+
try:
821+
if keys:
822+
self.delete_objects_from_s3_bucket(bucket.name, keys)
823+
bucket.delete()
824+
deleted_list.append(bucket.name)
825+
self.logger.info("Success: bucket '%s' was deleted.", bucket.name)
826+
except Exception as e:
827+
self.logger.exception("Bucket '%s' deletion failed due to %s", bucket.name,
828+
e.message)
829+
return deleted_list
818830

819831
def delete_objects_from_s3_bucket(self, bucket_name, object_keys):
820832
"""Delete each of the given object_keys from the given bucket"""

0 commit comments

Comments
 (0)