Skip to content

Commit dca5600

Browse files
authored
Merge pull request #2592 from dhermes/remove-iterator-restart
Removing Iterator.reset().
2 parents 4c55b1c + 38887ee commit dca5600

2 files changed

Lines changed: 30 additions & 26 deletions

File tree

core/google/cloud/iterator.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,11 @@ def __init__(self, client, path, item_to_value,
246246
items_key=DEFAULT_ITEMS_KEY,
247247
page_token=None, max_results=None, extra_params=None,
248248
page_start=_do_nothing_page_start):
249+
self._started = False
249250
self.client = client
250251
self.path = path
251-
self._items_key = items_key
252252
self._item_to_value = item_to_value
253+
self._items_key = items_key
253254
self.max_results = max_results
254255
self.extra_params = extra_params
255256
self._page_start = page_start
@@ -288,7 +289,15 @@ def page(self):
288289
return self._page
289290

290291
def __iter__(self):
291-
"""The :class:`Iterator` is an iterator."""
292+
"""The :class:`Iterator` is an iterator.
293+
294+
:rtype: :class:`Iterator`
295+
:returns: Current instance.
296+
:raises ValueError: If the iterator has already been started.
297+
"""
298+
if self._started:
299+
raise ValueError('Iterator has already started', self)
300+
self._started = True
292301
return self
293302

294303
def update_page(self, require_empty=True):
@@ -385,10 +394,3 @@ def _get_next_page_response(self):
385394
self.next_page_token = response.get('nextPageToken')
386395

387396
return response
388-
389-
def reset(self):
390-
"""Resets the iterator to the beginning."""
391-
self.page_number = 0
392-
self.next_page_token = None
393-
self.num_results = 0
394-
self._page = _UNSET

core/unit_tests/test_iterator.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,26 @@ def _makeOne(self, *args, **kw):
101101
return self._getTargetClass()(*args, **kw)
102102

103103
def test_constructor(self):
104+
from google.cloud.iterator import _do_nothing_page_start
105+
from google.cloud.iterator import _UNSET
106+
104107
connection = _Connection()
105108
client = _Client(connection)
106109
path = '/foo'
107110
iterator = self._makeOne(client, path, None)
111+
self.assertFalse(iterator._started)
108112
self.assertIs(iterator.client, client)
109113
self.assertEqual(iterator.path, path)
114+
self.assertIsNone(iterator._item_to_value)
115+
self.assertEqual(iterator._items_key, 'items')
116+
self.assertIsNone(iterator.max_results)
117+
self.assertEqual(iterator.extra_params, {})
118+
self.assertIs(iterator._page_start, _do_nothing_page_start)
119+
# Changing attributes.
110120
self.assertEqual(iterator.page_number, 0)
111121
self.assertIsNone(iterator.next_page_token)
122+
self.assertEqual(iterator.num_results, 0)
123+
self.assertIs(iterator._page, _UNSET)
112124

113125
def test_constructor_w_extra_param_collision(self):
114126
connection = _Connection()
@@ -193,6 +205,13 @@ def test___iter__(self):
193205
iterator = self._makeOne(None, None, None)
194206
self.assertIs(iter(iterator), iterator)
195207

208+
def test___iter___started(self):
209+
iterator = self._makeOne(None, None, None)
210+
iter_obj = iter(iterator)
211+
self.assertIs(iter_obj, iterator)
212+
with self.assertRaises(ValueError):
213+
iter(iterator)
214+
196215
def test_iterate(self):
197216
import six
198217

@@ -336,23 +355,6 @@ def test__get_next_page_response_new_no_token_in_response(self):
336355
self.assertEqual(kw['path'], path)
337356
self.assertEqual(kw['query_params'], {})
338357

339-
def test_reset(self):
340-
from google.cloud.iterator import _UNSET
341-
342-
connection = _Connection()
343-
client = _Client(connection)
344-
path = '/foo'
345-
token = 'token'
346-
iterator = self._makeOne(client, path, None)
347-
iterator.page_number = 1
348-
iterator.next_page_token = token
349-
iterator._page = object()
350-
iterator.reset()
351-
self.assertEqual(iterator.page_number, 0)
352-
self.assertEqual(iterator.num_results, 0)
353-
self.assertIsNone(iterator.next_page_token)
354-
self.assertIs(iterator._page, _UNSET)
355-
356358

357359
class _Connection(object):
358360

0 commit comments

Comments
 (0)