Skip to content

Commit

Permalink
Capture 'prefixes' returned in iterator response.
Browse files Browse the repository at this point in the history
  • Loading branch information
tseaver committed Nov 11, 2014
1 parent 3997902 commit 29511bb
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 40 deletions.
2 changes: 2 additions & 0 deletions gcloud/storage/bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class _KeyIterator(Iterator):
"""
def __init__(self, bucket, extra_params=None):
self.bucket = bucket
self.prefixes = ()
super(_KeyIterator, self).__init__(
connection=bucket.connection, path=bucket.path + '/o',
extra_params=extra_params)
Expand All @@ -32,6 +33,7 @@ def get_items_from_response(self, response):
:type response: dict
:param response: The JSON API response for a page of keys.
"""
self.prefixes = tuple(response.get('prefixes', ()))
for item in response.get('items', []):
yield Key.from_dict(item, bucket=self.bucket)

Expand Down
83 changes: 43 additions & 40 deletions gcloud/storage/test_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,49 @@
import unittest2


class Test__KeyIterator(unittest2.TestCase):

def _getTargetClass(self):
from gcloud.storage.bucket import _KeyIterator
return _KeyIterator

def _makeOne(self, *args, **kw):
return self._getTargetClass()(*args, **kw)

def test_ctor(self):
connection = _Connection()
bucket = _Bucket(connection)
iterator = self._makeOne(bucket)
self.assertTrue(iterator.bucket is bucket)
self.assertTrue(iterator.connection is connection)
self.assertEqual(iterator.path, '%s/o' % bucket.path)
self.assertEqual(iterator.page_number, 0)
self.assertEqual(iterator.next_page_token, None)
self.assertEqual(iterator.prefixes, ())

def test_get_items_from_response_empty(self):
connection = _Connection()
bucket = _Bucket(connection)
iterator = self._makeOne(bucket)
self.assertEqual(list(iterator.get_items_from_response({})), [])
self.assertEqual(iterator.prefixes, ())

def test_get_items_from_response_non_empty(self):
from gcloud.storage.key import Key
KEY = 'key'
response = {'items': [{'name': KEY}], 'prefixes': ['foo']}
connection = _Connection()
bucket = _Bucket(connection)
iterator = self._makeOne(bucket)
keys = list(iterator.get_items_from_response(response))
self.assertEqual(len(keys), 1)
key = keys[0]
self.assertTrue(isinstance(key, Key))
self.assertTrue(key.connection is connection)
self.assertEqual(key.name, KEY)
self.assertEqual(iterator.prefixes, ('foo',))


class Test_Bucket(unittest2.TestCase):

def _getTargetClass(self):
Expand Down Expand Up @@ -917,46 +960,6 @@ def get_items_from_response(self, response):
self.assertEqual(kw[1]['query_params'], {})


class Test__KeyIterator(unittest2.TestCase):

def _getTargetClass(self):
from gcloud.storage.bucket import _KeyIterator
return _KeyIterator

def _makeOne(self, *args, **kw):
return self._getTargetClass()(*args, **kw)

def test_ctor(self):
connection = _Connection()
bucket = _Bucket(connection)
iterator = self._makeOne(bucket)
self.assertTrue(iterator.bucket is bucket)
self.assertTrue(iterator.connection is connection)
self.assertEqual(iterator.path, '%s/o' % bucket.path)
self.assertEqual(iterator.page_number, 0)
self.assertEqual(iterator.next_page_token, None)

def test_get_items_from_response_empty(self):
connection = _Connection()
bucket = _Bucket(connection)
iterator = self._makeOne(bucket)
self.assertEqual(list(iterator.get_items_from_response({})), [])

def test_get_items_from_response_non_empty(self):
from gcloud.storage.key import Key
KEY = 'key'
response = {'items': [{'name': KEY}]}
connection = _Connection()
bucket = _Bucket(connection)
iterator = self._makeOne(bucket)
keys = list(iterator.get_items_from_response(response))
self.assertEqual(len(keys), 1)
key = keys[0]
self.assertTrue(isinstance(key, Key))
self.assertTrue(key.connection is connection)
self.assertEqual(key.name, KEY)


class _Connection(object):
_delete_ok = False

Expand Down

0 comments on commit 29511bb

Please sign in to comment.