Skip to content

Commit

Permalink
[RFR]This PR will add list_s3_bucket method and forcefully remove t…
Browse files Browse the repository at this point in the history
…he 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.
  • Loading branch information
sbulage authored and izapolsk committed Dec 10, 2018
1 parent cf5515a commit f555070
Showing 1 changed file with 23 additions and 11 deletions.
34 changes: 23 additions & 11 deletions wrapanapi/systems/ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,9 @@ def create_s3_bucket(self, bucket_name):
self.logger.exception("Error: Bucket was not successfully created.")
return False

def list_s3_bucket_names(self):
return [bucket.name for bucket in self.s3_connection.buckets.all()]

def upload_file_to_s3_bucket(self, bucket_name, file_path, file_name):
bucket = self.s3_connection.Bucket(bucket_name)
self.logger.info("uploading file '%s' to bucket: '%s'", file_path, bucket_name)
Expand All @@ -804,17 +807,26 @@ def object_exists_in_bucket(self, bucket_name, object_key):
objects = [o for o in bucket.objects.all() if o.key == object_key]
return any(objects)

def delete_s3_bucket(self, bucket_name):
"""TODO: Force delete - delete all objects and then bucket"""
bucket = self.s3_connection.Bucket(bucket_name)
self.logger.info("Trying to delete bucket '%s'", bucket_name)
try:
bucket.delete()
self.logger.info("Success: bucket '%s' was deleted.", bucket_name)
return True
except Exception:
self.logger.exception("Bucket '%s' deletion failed", bucket_name)
return False
def delete_s3_buckets(self, bucket_names):
""" Deletes specified bucket(s) with keys """
deleted_list = []
if isinstance(bucket_names, (set, list, tuple)):
buckets = [self.s3_connection.Bucket(obj_name) for obj_name in bucket_names]
else:
raise ValueError("Object is not iterable.")
for bucket in buckets:
self.logger.info("Trying to delete bucket '%s'", bucket.anem)
keys = [obj.key for obj in bucket.objects.all()]
try:
if keys:
self.delete_objects_from_s3_bucket(bucket.name, keys)
bucket.delete()
deleted_list.append(bucket.name)
self.logger.info("Success: bucket '%s' was deleted.", bucket.name)
except Exception as e:
self.logger.exception("Bucket '%s' deletion failed due to %s", bucket.name,
e.message)
return deleted_list

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

0 comments on commit f555070

Please sign in to comment.