Repository: libcloud
Updated Branches:
  refs/heads/trunk f8634a8cd -> f95203052


LIBCLOUD-986: Add prefix option to azure blob list and iterate container methods

Signed-off-by: Quentin Pradet <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/1af5caf9
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/1af5caf9
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/1af5caf9

Branch: refs/heads/trunk
Commit: 1af5caf92a97092f7f11221ca881127e90807cb5
Parents: f8634a8
Author: jhawk <[email protected]>
Authored: Wed Mar 21 12:08:02 2018 -0700
Committer: Quentin Pradet <[email protected]>
Committed: Fri Mar 23 09:27:28 2018 +0400

----------------------------------------------------------------------
 libcloud/storage/drivers/azure_blobs.py   | 21 +++++++++++++++++++--
 libcloud/test/storage/test_azure_blobs.py | 22 ++++++++++++++++++++++
 2 files changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/1af5caf9/libcloud/storage/drivers/azure_blobs.py
----------------------------------------------------------------------
diff --git a/libcloud/storage/drivers/azure_blobs.py 
b/libcloud/storage/drivers/azure_blobs.py
index 82ee03a..2475793 100644
--- a/libcloud/storage/drivers/azure_blobs.py
+++ b/libcloud/storage/drivers/azure_blobs.py
@@ -381,11 +381,12 @@ class AzureBlobsStorageDriver(StorageDriver):
             if not params['marker']:
                 break
 
-    def iterate_container_objects(self, container):
+    def iterate_container_objects(self, container, ex_prefix=None):
         """
         @inherits: :class:`StorageDriver.iterate_container_objects`
         """
-        params = {'restype': 'container',
+        params = {'prefix': ex_prefix,
+                  'restype': 'container',
                   'comp': 'list',
                   'maxresults': RESPONSES_PER_REQUEST,
                   'include': 'metadata'}
@@ -416,6 +417,22 @@ class AzureBlobsStorageDriver(StorageDriver):
             if not params['marker']:
                 break
 
+    def list_container_objects(self, container, ex_prefix=None):
+        """
+        Return a list of objects for the given container.
+
+        :param container: Container instance.
+        :type container: :class:`Container`
+
+        :param ex_prefix: Only return objects starting with ex_prefix
+        :type ex_prefix: ``str``
+
+        :return: A list of Object instances.
+        :rtype: ``list`` of :class:`Object`
+        """
+        return list(self.iterate_container_objects(container,
+                                                   ex_prefix=ex_prefix))
+
     def get_container(self, container_name):
         """
         @inherits: :class:`StorageDriver.get_container`

http://git-wip-us.apache.org/repos/asf/libcloud/blob/1af5caf9/libcloud/test/storage/test_azure_blobs.py
----------------------------------------------------------------------
diff --git a/libcloud/test/storage/test_azure_blobs.py 
b/libcloud/test/storage/test_azure_blobs.py
index 95ab3f1..69bdebb 100644
--- a/libcloud/test/storage/test_azure_blobs.py
+++ b/libcloud/test/storage/test_azure_blobs.py
@@ -447,6 +447,28 @@ class AzureBlobsTests(unittest.TestCase):
         self.assertTrue('content_encoding' in obj.extra)
         self.assertTrue('content_language' in obj.extra)
 
+    def test_list_container_objects_with_prefix(self):
+        self.mock_response_klass.type = None
+        AzureBlobsStorageDriver.RESPONSES_PER_REQUEST = 2
+
+        container = Container(name='test_container', extra={},
+                              driver=self.driver)
+        objects = self.driver.list_container_objects(container=container,
+                                                     ex_prefix='test_prefix')
+        self.assertEqual(len(objects), 4)
+
+        obj = objects[1]
+        self.assertEqual(obj.name, 'object2.txt')
+        self.assertEqual(obj.hash, '0x8CFB90F1BA8CD8F')
+        self.assertEqual(obj.size, 1048576)
+        self.assertEqual(obj.container.name, 'test_container')
+        self.assertTrue('meta1' in obj.meta_data)
+        self.assertTrue('meta2' in obj.meta_data)
+        self.assertTrue('last_modified' in obj.extra)
+        self.assertTrue('content_type' in obj.extra)
+        self.assertTrue('content_encoding' in obj.extra)
+        self.assertTrue('content_language' in obj.extra)
+
     def test_get_container_doesnt_exist(self):
         self.mock_response_klass.type = None
         try:

Reply via email to