almahmoud 7 лет назад
Родитель
Сommit
ada90db4b7
2 измененных файлов с 109 добавлено и 0 удалено
  1. 9 0
      cloudbridge/cloud/base/services.py
  2. 100 0
      cloudbridge/cloud/interfaces/services.py

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

@@ -11,6 +11,7 @@ from cloudbridge.cloud.base.resources import BaseSubnet
 from cloudbridge.cloud.interfaces.resources import Network
 from cloudbridge.cloud.interfaces.resources import Network
 from cloudbridge.cloud.interfaces.resources import Router
 from cloudbridge.cloud.interfaces.resources import Router
 from cloudbridge.cloud.interfaces.services import BucketService
 from cloudbridge.cloud.interfaces.services import BucketService
+from cloudbridge.cloud.interfaces.services import BucketObjectService
 from cloudbridge.cloud.interfaces.services import CloudService
 from cloudbridge.cloud.interfaces.services import CloudService
 from cloudbridge.cloud.interfaces.services import ComputeService
 from cloudbridge.cloud.interfaces.services import ComputeService
 from cloudbridge.cloud.interfaces.services import ImageService
 from cloudbridge.cloud.interfaces.services import ImageService
@@ -247,6 +248,14 @@ class BaseBucketService(
                          name=name, location=location)
                          name=name, location=location)
 
 
 
 
+class BaseBucketObjectService(
+        BasePageableObjectMixin, BucketObjectService, BaseCloudService):
+
+    def __init__(self, provider):
+        super(BaseBucketObjectService, self).__init__(provider)
+        self._service_event_name = "provider.storage.bucket_objects"
+
+
 class BaseComputeService(ComputeService, BaseCloudService):
 class BaseComputeService(ComputeService, BaseCloudService):
 
 
     def __init__(self, provider):
     def __init__(self, provider):

+ 100 - 0
cloudbridge/cloud/interfaces/services.py

@@ -945,6 +945,106 @@ class BucketService(PageableObjectMixin, CloudService):
         pass
         pass
 
 
 
 
+class BucketObjectService(PageableObjectMixin, CloudService):
+
+    """
+    The Bucket Object Service interface provides access to the underlying
+    object storage capabilities of this provider. This service is optional and
+    the :func:`CloudProvider.has_service()` method should be used to verify its
+    availability before using the service.
+    """
+    __metaclass__ = ABCMeta
+
+    @abstractmethod
+    def get(self, bucket, object_id):
+        """
+        Returns a bucket object given its ID and the ID of bucket containing
+        it. Returns ``None`` if the bucket object or bucket does not exist.
+        On some providers, such as AWS and OpenStack, the bucket id is the
+        same as its name.
+
+        Example:
+
+        .. code-block:: python
+
+            bucket = provider.storage.buckets.get('my_bucket_id')
+            buck_obj = provider.storage.bucket_objects.get('my_object_id',
+                                                           bucket)
+            print(buck_obj.id, buck_obj.name)
+
+        :rtype: :class:`.BucketObject`
+        :return:  a BucketObject instance
+        """
+        pass
+
+    @abstractmethod
+    def find(self, bucket, **kwargs):
+        """
+        Searches for a bucket object in a bucket by a given list of attributes.
+
+        Supported attributes: name
+
+        Example:
+
+        .. code-block:: python
+
+            bucket = provider.storage.buckets.get('my_bucket_id')
+            objs = provider.storage.bucket_objects.find(bucket,
+                                                        name='my_obj_name')
+            for buck_obj in objs:
+                print(buck_obj.id, buck_obj.name)
+
+        :rtype: :class:`.BucketObject`
+        :return:  a BucketObject instance
+        """
+        pass
+
+    @abstractmethod
+    def list(self, bucket, limit=None, marker=None):
+        """
+        List all bucket objects within a bucket.
+
+        Example:
+
+        .. code-block:: python
+
+            bucket = provider.storage.buckets.get('my_bucket_id')
+            objs = provider.storage.bucket_objects.list(bucket)
+            for buck_obj in objs:
+                print(buck_obj.id, buck_obj.name)
+
+        :rtype: :class:`.BucketObject`
+        :return:  a BucketObject instance
+        """
+        pass
+
+    @abstractmethod
+    def create(self, bucket, object_name):
+        """
+        Create a new bucket object within a bucket.
+
+        Example:
+
+        .. code-block:: python
+
+            bucket = provider.storage.buckets.get('my_bucket_id')
+            buck_obj = provider.storage.bucket_objects.create('my_name',
+                                                              bucket)
+            print(buck_obj.name)
+
+
+        :type object_name: str
+        :param object_name: The name of this bucket.
+
+        :type bucket: str
+        :param bucket: A bucket object.
+
+        :return:  a BucketObject instance
+        :rtype: ``object`` of :class:`.BucketObject`
+        """
+        pass
+
+
 class SecurityService(CloudService):
 class SecurityService(CloudService):
 
 
     """
     """