Skip to content

Commit

Permalink
Merge pull request googleapis#2592 from dhermes/remove-iterator-restart
Browse files Browse the repository at this point in the history
Removing Iterator.reset().
  • Loading branch information
dhermes authored Oct 24, 2016
2 parents 147cb45 + 8067d29 commit 52d1aa3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 26 deletions.
20 changes: 11 additions & 9 deletions core/google/cloud/iterator.py
Original file line number Diff line number Diff line change
Expand Up @@ -246,10 +246,11 @@ def __init__(self, client, path, item_to_value,
items_key=DEFAULT_ITEMS_KEY,
page_token=None, max_results=None, extra_params=None,
page_start=_do_nothing_page_start):
self._started = False
self.client = client
self.path = path
self._items_key = items_key
self._item_to_value = item_to_value
self._items_key = items_key
self.max_results = max_results
self.extra_params = extra_params
self._page_start = page_start
Expand Down Expand Up @@ -288,7 +289,15 @@ def page(self):
return self._page

def __iter__(self):
"""The :class:`Iterator` is an iterator."""
"""The :class:`Iterator` is an iterator.
:rtype: :class:`Iterator`
:returns: Current instance.
:raises ValueError: If the iterator has already been started.
"""
if self._started:
raise ValueError('Iterator has already started', self)
self._started = True
return self

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

return response

def reset(self):
"""Resets the iterator to the beginning."""
self.page_number = 0
self.next_page_token = None
self.num_results = 0
self._page = _UNSET
36 changes: 19 additions & 17 deletions core/unit_tests/test_iterator.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,14 +101,26 @@ def _makeOne(self, *args, **kw):
return self._getTargetClass()(*args, **kw)

def test_constructor(self):
from google.cloud.iterator import _do_nothing_page_start
from google.cloud.iterator import _UNSET

connection = _Connection()
client = _Client(connection)
path = '/foo'
iterator = self._makeOne(client, path, None)
self.assertFalse(iterator._started)
self.assertIs(iterator.client, client)
self.assertEqual(iterator.path, path)
self.assertIsNone(iterator._item_to_value)
self.assertEqual(iterator._items_key, 'items')
self.assertIsNone(iterator.max_results)
self.assertEqual(iterator.extra_params, {})
self.assertIs(iterator._page_start, _do_nothing_page_start)
# Changing attributes.
self.assertEqual(iterator.page_number, 0)
self.assertIsNone(iterator.next_page_token)
self.assertEqual(iterator.num_results, 0)
self.assertIs(iterator._page, _UNSET)

def test_constructor_w_extra_param_collision(self):
connection = _Connection()
Expand Down Expand Up @@ -193,6 +205,13 @@ def test___iter__(self):
iterator = self._makeOne(None, None, None)
self.assertIs(iter(iterator), iterator)

def test___iter___started(self):
iterator = self._makeOne(None, None, None)
iter_obj = iter(iterator)
self.assertIs(iter_obj, iterator)
with self.assertRaises(ValueError):
iter(iterator)

def test_iterate(self):
import six

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

def test_reset(self):
from google.cloud.iterator import _UNSET

connection = _Connection()
client = _Client(connection)
path = '/foo'
token = 'token'
iterator = self._makeOne(client, path, None)
iterator.page_number = 1
iterator.next_page_token = token
iterator._page = object()
iterator.reset()
self.assertEqual(iterator.page_number, 0)
self.assertEqual(iterator.num_results, 0)
self.assertIsNone(iterator.next_page_token)
self.assertIs(iterator._page, _UNSET)


class _Connection(object):

Expand Down

0 comments on commit 52d1aa3

Please sign in to comment.