almahmoud 7 лет назад
Родитель
Сommit
3fa705e6e8

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

@@ -108,6 +108,7 @@ class BaseBucketService(
         super(BaseBucketService, self).__init__(provider)
         super(BaseBucketService, self).__init__(provider)
         self._service_event_name = "provider.storage.buckets"
         self._service_event_name = "provider.storage.buckets"
         self._init_get()
         self._init_get()
+        self._init_find()
 
 
     @property
     @property
     def service_event_name(self):
     def service_event_name(self):
@@ -138,6 +139,44 @@ class BaseBucketService(
         event_name = ".".join((self.service_event_name, "get"))
         event_name = ".".join((self.service_event_name, "get"))
         return self.provider.events.emit(event_name, args)
         return self.provider.events.emit(event_name, args)
 
 
+    def _find_pre_log(self, **kwargs):
+        log.debug("Finding {} buckets with the the following arguments: {}"
+                  .format(self.provider.name, kwargs))
+
+    def _find_post_log(self, result, **kwargs):
+        log.debug("Returned bucket objects: {}".format(result))
+
+    def _init_find(self):
+        event_name = ".".join((self.service_event_name, "find"))
+        self.provider.events.subscribe(event_name, 20000,
+                                       self._find_pre_log)
+        self.provider.events.subscribe(event_name, 20500,
+                                       self._find,
+                                       self._find_post_log)
+
+    # Generic find will be used for providers where we have not implemented
+    # provider-specific querying for find method
+    def _find(self, **kwargs):
+        obj_list = self
+        filters = ['name']
+        matches = cb_helpers.generic_find(filters, kwargs, obj_list)
+
+        # All kwargs should have been popped at this time.
+        if len(kwargs) > 0:
+            raise TypeError("Unrecognised parameters for search: %s."
+                            " Supported attributes: %s" % (kwargs,
+                                                           ", ".join(filters)))
+
+        return ClientPagedResultList(self.provider,
+                                     matches if matches else [])
+
+    def find(self, **kwargs):
+        """
+        Returns a list of buckets filtered by the given keyword arguments.
+        """
+        event_name = ".".join((self.service_event_name, "find"))
+        return self.provider.events.emit(event_name, kwargs)
+
 
 
 class BaseComputeService(ComputeService, BaseCloudService):
 class BaseComputeService(ComputeService, BaseCloudService):
 
 

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

@@ -327,13 +327,6 @@ class AWSBucketService(BaseBucketService):
         # For all other responses, it's assumed that the bucket does not exist.
         # For all other responses, it's assumed that the bucket does not exist.
         return None
         return None
 
 
-    def find(self, **kwargs):
-        obj_list = self
-        filters = ['name']
-        matches = cb_helpers.generic_find(filters, kwargs, obj_list)
-        return ClientPagedResultList(self._provider, list(matches),
-                                     limit=None, marker=None)
-
     def list(self, limit=None, marker=None):
     def list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
         return self.svc.list(limit=limit, marker=marker)
 
 

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

@@ -391,20 +391,6 @@ class AzureBucketService(BaseBucketService):
             log.exception(error)
             log.exception(error)
             return None
             return None
 
 
-    def find(self, **kwargs):
-        obj_list = self
-        filters = ['name']
-        matches = cb_helpers.generic_find(filters, kwargs, obj_list)
-
-        # All kwargs should have been popped at this time.
-        if len(kwargs) > 0:
-            raise TypeError("Unrecognised parameters for search: %s."
-                            " Supported attributes: %s" % (kwargs,
-                                                           ", ".join(filters)))
-
-        return ClientPagedResultList(self.provider,
-                                     matches if matches else [])
-
     def list(self, limit=None, marker=None):
     def list(self, limit=None, marker=None):
         """
         """
         List all containers.
         List all containers.

+ 2 - 6
cloudbridge/cloud/providers/openstack/services.py

@@ -426,18 +426,14 @@ class OpenStackBucketService(BaseBucketService):
             log.debug("Bucket %s was not found.", bucket_id)
             log.debug("Bucket %s was not found.", bucket_id)
             return None
             return None
 
 
-    def find(self, **kwargs):
+    def _find(self, **kwargs):
         name = kwargs.pop('name', None)
         name = kwargs.pop('name', None)
 
 
         # All kwargs should have been popped at this time.
         # All kwargs should have been popped at this time.
         if len(kwargs) > 0:
         if len(kwargs) > 0:
             raise TypeError("Unrecognised parameters for search: %s."
             raise TypeError("Unrecognised parameters for search: %s."
                             " Supported attributes: %s" % (kwargs, 'name'))
                             " Supported attributes: %s" % (kwargs, 'name'))
-
-        log.debug("Searching for the OpenStack Bucket with the name: %s", name)
-        _, container_list = self.provider.swift.get_account(
-            limit=oshelpers.os_result_limit(self.provider),
-            marker=None)
+        _, container_list = self.provider.swift.get_account()
         cb_buckets = [OpenStackBucket(self.provider, c)
         cb_buckets = [OpenStackBucket(self.provider, c)
                       for c in container_list
                       for c in container_list
                       if name in c.get("name")]
                       if name in c.get("name")]