8000 Add 'Bucket.iterator' method. · googleapis/google-cloud-python@77ccaf1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 77ccaf1

Browse files
committed
Add 'Bucket.iterator' method.
Exposes additional paramters for narrowing / batching key search. Fixes #26.
1 parent 6a2577f commit 77ccaf1

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

gcloud/storage/bucket.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,42 @@ def get_all_keys(self):
170170
"""
171171
return list(self)
172172

173+
def iterator(self, prefix=None, delimiter=None, max_results=None,
174+
versions=None):
175+
"""Return an iterator used to find keys in the bucket.
176+
177+
:type prefix: string or None
178+
:param prefix: optional prefix used to filter keys.
179+
180+
:type delimiter: string or None
181+
:param delimiter: optional delimter, used with ``prefix`` to
182+
emulate hierarchy.
183+
184+
:type max_results: integer or None
185+
:param max_results: maximum number of keys to return.
186+
187+
:type versions: boolean or None
188+
:param versions: whether object versions should be returned as
189+
separate keys.
190+
191+
:rtype: :class:`_KeyIterator`
192+
"""
193+
extra_params = {}
194+
195+
if prefix is not None:
196+
extra_params['prefix'] = prefix
197+
198+
if delimiter is not None:
199+
extra_params['delimiter'] = delimiter
200+
201+
if max_results is not None:
202+
extra_params['maxResults'] = max_results
203+
204+
if versions is not None:
205+
extra_params['versions'] = versions
206+
207+
return self._iterator_class(self, extra_params=extra_params)
208+
173209
def new_key(self, key):
174210
"""Given path name (or Key), return a :class:`.storage.key.Key` object.
175211

gcloud/storage/test_bucket.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,41 @@ def test_get_all_keys_non_empty(self):
170170
self.assertEqual(kw['path'], '/b/%s/o' % NAME)
171171
self.assertEqual(kw['query_params'], {})
172172

173+
def test_iterator_defaults(self):
174+
NAME = 'name'
175+
connection = _Connection({'items': []})
176+
bucket = self._makeOne(connection, NAME)
177+
iterator = bucket.iterator()
178+
keys = list(iterator)
179+
self.assertEqual(keys, [])
180+
kw, = connection._requested
181+
self.assertEqual(kw['method'], 'GET')
182+
self.assertEqual(kw['path'], '/b/%s/o' % NAME)
183+
self.assertEqual(kw['query_params'], {})
184+
185+
def test_iterator_explicit(self):
186+
NAME = 'name'
187+
EXPECTED = {
188+
'prefix': 'subfolder',
189+
'delimiter': '/',
190+
'maxResults': 10,
191+
'versions': True,
192+
}
193+
connection = _Connection({'items': []})
194+
bucket = self._makeOne(connection, NAME)
195+
iterator = bucket.iterator(
196+
prefix='subfolder',
197+
delimiter='/',
198+
max_results=10,
199+
versions=True,
200+
)
201+
keys = list(iterator)
202+
self.assertEqual(keys, [])
203+
kw, = connection._requested
204+
self.assertEqual(kw['method'], 'GET')
205+
self.assertEqual(kw['path'], '/b/%s/o' % NAME)
206+
self.assertEqual(kw['query_params'], EXPECTED)
207+
173208
def test_new_key_existing(self):
174209
from gcloud.storage.key import Key
175210
existing = Key()

0 commit comments

Comments
 (0)
0