Просмотр исходного кода

BucketService delete refactored + DocStrings updated

almahmoud 7 лет назад
Родитель
Сommit
28e2afac6d

+ 6 - 0
cloudbridge/cloud/base/resources.py

@@ -752,6 +752,12 @@ class BaseBucket(BaseCloudResource, Bucket):
                 # check from most to least likely mutables
                 self.name == other.name)
 
+    def delete(self):
+        """
+        Delete this bucket.
+        """
+        self._provider.storage.buckets.delete(self.id)
+
 
 class BaseBucketContainer(BasePageableObjectMixin, BucketContainer):
 

+ 25 - 0
cloudbridge/cloud/base/services.py

@@ -195,12 +195,21 @@ class BaseBucketService(
         """
         Returns a bucket given its ID. Returns ``None`` if the bucket
         does not exist.
+
+        :type bucket_id: str
+        :param bucket_id: The id of the desired bucket.
+
+        :rtype: ``Bucket``
+        :return:  ``None`` is returned if the bucket does not exist, and
+                  the bucket's provider-specific CloudBridge object is
+                  returned if the bucket is found.
         """
         return self.emit_function(self, "get", bucket_id)
 
     def find(self, **kwargs):
         """
         Returns a list of buckets filtered by the given keyword arguments.
+        Accepted search arguments are: 'name'
         """
         return self.emit_function(self, "find", **kwargs)
 
@@ -213,10 +222,26 @@ class BaseBucketService(
     def create(self, name, location=None):
         """
         Create a new bucket.
+
+        :type name: str
+        :param name: The name of the bucket to be created. Note that names
+                     must be unique, and are unchangeable.
+
+        :rtype: ``Bucket``
+        :return:  The created bucket's provider-specific CloudBridge object.
         """
         BaseBucket.assert_valid_resource_name(name)
         return self.emit_function(self, "create", name, location=location)
 
+    def delete(self, bucket_id):
+        """
+        Delete an existing bucket.
+
+        :type bucket_id: str
+        :param bucket_id: The ID of the bucket to be deleted.
+        """
+        return self.emit_function(self, "delete", bucket_id)
+
 
 class BaseBucketObjectService(
         BasePageableObjectMixin, BucketObjectService, BaseStorageService):

+ 0 - 3
cloudbridge/cloud/providers/aws/resources.py

@@ -888,9 +888,6 @@ class AWSBucket(BaseBucket):
     def objects(self):
         return self._object_container
 
-    def delete(self, delete_contents=False):
-        self._bucket.delete()
-
 
 class AWSBucketContainer(BaseBucketContainer):
 

+ 7 - 0
cloudbridge/cloud/providers/aws/services.py

@@ -379,6 +379,13 @@ class AWSBucketService(BaseBucketService):
                 else:
                     raise
 
+    @execute(event_pattern="aws.storage.buckets.delete",
+             priority=BaseBucketService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, bucket_id):
+        bucket = self._get(bucket_id)
+        if bucket:
+            bucket._bucket.delete()
+
 
 class AWSBucketObjectService(BaseBucketObjectService):
 

+ 0 - 6
cloudbridge/cloud/providers/azure/resources.py

@@ -358,12 +358,6 @@ class AzureBucket(BaseBucket):
         """
         return self._bucket.name
 
-    def delete(self, delete_contents=True):
-        """
-        Delete this bucket.
-        """
-        self._provider.azure_client.delete_container(self.name)
-
     def exists(self, name):
         """
         Determine if an object with given name exists in this bucket.

+ 8 - 0
cloudbridge/cloud/providers/azure/services.py

@@ -428,6 +428,14 @@ class AzureBucketService(BaseBucketService):
         bucket = self.provider.azure_client.create_container(name)
         return AzureBucket(self.provider, bucket)
 
+    @execute(event_pattern="azure.storage.buckets.delete",
+             priority=BaseBucketService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, bucket_id):
+        """
+        Delete this bucket.
+        """
+        self.provider.azure_client.delete_container(bucket_id)
+
 
 class AzureBucketObjectService(BaseBucketObjectService):
     def __init__(self, provider):

+ 0 - 14
cloudbridge/cloud/providers/gce/resources.py

@@ -2265,20 +2265,6 @@ class GCSBucket(BaseBucket):
     def objects(self):
         return self._object_container
 
-    def delete(self, delete_contents=False):
-        """
-        Delete this bucket.
-        """
-        (self._provider
-             .gcs_storage
-             .buckets()
-             .delete(bucket=self.name)
-             .execute())
-        # GCS has a rate limit of 1 operation per 2 seconds for bucket
-        # creation/deletion: https://cloud.google.com/storage/quotas.  Throttle
-        # here to avoid future failures.
-        time.sleep(2)
-
     def create_object(self, name):
         """
         Create an empty plain text object.

+ 16 - 0
cloudbridge/cloud/providers/gce/services.py

@@ -1202,3 +1202,19 @@ class GCSBucketService(BaseBucketService):
                     'Bucket already exists with name {0}'.format(name))
             else:
                 raise
+
+    @execute(event_pattern="gce.storage.buckets.delete",
+             priority=BaseBucketService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, bucket_id):
+        """
+        Delete this bucket.
+        """
+        (self._provider
+             .gcs_storage
+             .buckets()
+             .delete(bucket=bucket_id)
+             .execute())
+        # GCS has a rate limit of 1 operation per 2 seconds for bucket
+        # creation/deletion: https://cloud.google.com/storage/quotas. Throttle
+        # here to avoid future failures.
+        time.sleep(2)

+ 0 - 3
cloudbridge/cloud/providers/openstack/resources.py

@@ -1517,9 +1517,6 @@ class OpenStackBucket(BaseBucket):
     def objects(self):
         return self._object_container
 
-    def delete(self, delete_contents=False):
-        self._provider.swift.delete_container(self.name)
-
 
 class OpenStackBucketContainer(BaseBucketContainer):
 

+ 5 - 0
cloudbridge/cloud/providers/openstack/services.py

@@ -466,6 +466,11 @@ class OpenStackBucketService(BaseBucketService):
             self.provider.swift.put_container(name)
             return self.get(name)
 
+    @execute(event_pattern="openstack.storage.buckets.delete",
+             priority=BaseBucketService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, bucket_id):
+        self.provider.swift.delete_container(bucket_id)
+
 
 class OpenStackBucketObjectService(BaseBucketObjectService):