Skip to content

Commit 19c9d96

Browse files
author
Jon Wayne Parrott
authored
Revert "Revert "api_core: Make PageIterator.item_to_value public. (#4702)" (#4731)"
This reverts commit b0dc7bc.
1 parent b0dc7bc commit 19c9d96

File tree

7 files changed

+27
-16
lines changed

7 files changed

+27
-16
lines changed

api_core/google/api_core/page_iterator.py

+17-4
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,25 @@ def __init__(self, client, item_to_value=_item_to_value_identity,
158158
page_token=None, max_results=None):
159159
self._started = False
160160
self.client = client
161-
self._item_to_value = item_to_value
161+
"""Optional[Any]: The client that created this iterator."""
162+
self.item_to_value = item_to_value
163+
"""Callable[Iterator, Any]: Callable to convert an item from the type
164+
in the raw API response into the native object. Will be called with
165+
the iterator and a
166+
single item.
167+
"""
162168
self.max_results = max_results
169+
"""int: The maximum number of results to fetch."""
170+
163171
# The attributes below will change over the life of the iterator.
164172
self.page_number = 0
173+
"""int: The current page of results."""
165174
self.next_page_token = page_token
175+
"""str: The token for the next page of results. If this is set before
176+
the iterator starts, it effectively offsets the iterator to a
177+
specific starting point."""
166178
self.num_results = 0
179+
"""int: The total number of results fetched so far."""
167180

168181
@property
169182
def pages(self):
@@ -335,7 +348,7 @@ def _next_page(self):
335348
if self._has_next_page():
336349
response = self._get_next_page_response()
337350
items = response.get(self._items_key, ())
338-
page = Page(self, items, self._item_to_value)
351+
page = Page(self, items, self.item_to_value)
339352
self._page_start(self, page, response)
340353
self.next_page_token = response.get(self._next_token)
341354
return page
@@ -428,7 +441,7 @@ def _next_page(self):
428441
"""
429442
try:
430443
items = six.next(self._gax_page_iter)
431-
page = Page(self, items, self._item_to_value)
444+
page = Page(self, items, self.item_to_value)
432445
self.next_page_token = self._gax_page_iter.page_token or None
433446
return page
434447
except StopIteration:
@@ -500,7 +513,7 @@ def _next_page(self):
500513

501514
self.next_page_token = getattr(response, self._response_token_field)
502515
items = getattr(response, self._items_field)
503-
page = Page(self, items, self._item_to_value)
516+
page = Page(self, items, self.item_to_value)
504517

505518
return page
506519

api_core/tests/unit/test_page_iterator.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ def test_constructor(self):
8888

8989
assert not iterator._started
9090
assert iterator.client is client
91-
assert iterator._item_to_value == item_to_value
91+
assert iterator.item_to_value == item_to_value
9292
assert iterator.max_results == max_results
9393
# Changing attributes.
9494
assert iterator.page_number == 0
@@ -214,7 +214,7 @@ def test_constructor(self):
214214
assert not iterator._started
215215
assert iterator.client is client
216216
assert iterator.path == path
217-
assert iterator._item_to_value is mock.sentinel.item_to_value
217+
assert iterator.item_to_value is mock.sentinel.item_to_value
218218
assert iterator._items_key == 'items'
219219
assert iterator.max_results is None
220220
assert iterator.extra_params == {}
@@ -419,10 +419,10 @@ def test_constructor(self):
419419
assert not iterator._started
420420
assert iterator.client is client
421421
assert iterator.max_results is None
422+
assert iterator.item_to_value is page_iterator._item_to_value_identity
422423
assert iterator._method == mock.sentinel.method
423424
assert iterator._request == mock.sentinel.request
424425
assert iterator._items_field == items_field
425-
assert iterator._item_to_value is page_iterator._item_to_value_identity
426426
assert (iterator._request_token_field ==
427427
page_iterator.GRPCIterator._DEFAULT_REQUEST_TOKEN_FIELD)
428428
assert (iterator._response_token_field ==
@@ -446,10 +446,10 @@ def test_constructor_options(self):
446446

447447
assert iterator.client is client
448448
assert iterator.max_results == 42
449+
assert iterator.item_to_value is mock.sentinel.item_to_value
449450
assert iterator._method == mock.sentinel.method
450451
assert iterator._request == mock.sentinel.request
451452
assert iterator._items_field == items_field
452-
assert iterator._item_to_value is mock.sentinel.item_to_value
453453
assert iterator._request_token_field == request_field
454454
assert iterator._response_token_field == response_field
455455

@@ -517,7 +517,7 @@ def test_constructor(self):
517517

518518
assert not iterator._started
519519
assert iterator.client is client
520-
assert iterator._item_to_value is item_to_value
520+
assert iterator.item_to_value is item_to_value
521521
assert iterator.max_results == max_results
522522
assert iterator._gax_page_iter is page_iter
523523
# Changing attributes.

bigquery/tests/unit/test_table.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,7 @@ def test_constructor(self):
941941
self.assertFalse(iterator._started)
942942
self.assertIs(iterator.client, client)
943943
self.assertEqual(iterator.path, path)
944-
self.assertIs(iterator._item_to_value, _item_to_row)
944+
self.assertIs(iterator.item_to_value, _item_to_row)
945945
self.assertEqual(iterator._items_key, 'rows')
946946
self.assertIsNone(iterator.max_results)
947947
self.assertEqual(iterator.extra_params, {})

datastore/google/cloud/datastore/query.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ def _next_page(self):
515515
query=query_pb,
516516
)
517517
entity_pbs = self._process_query_results(response_pb)
518-
return page_iterator.Page(self, entity_pbs, self._item_to_value)
518+
return page_iterator.Page(self, entity_pbs, self.item_to_value)
519519

520520

521521
def _pb_from_query(query):

datastore/tests/unit/test_query.py

-2
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,6 @@ def test_constructor_defaults(self):
361361

362362
self.assertFalse(iterator._started)
363363
self.assertIs(iterator.client, client)
364-
self.assertIsNotNone(iterator._item_to_value)
365364
self.assertIsNone(iterator.max_results)
366365
self.assertEqual(iterator.page_number, 0)
367366
self.assertIsNone(iterator.next_page_token,)
@@ -384,7 +383,6 @@ def test_constructor_explicit(self):
384383

385384
self.assertFalse(iterator._started)
386385
self.assertIs(iterator.client, client)
387-
self.assertIsNotNone(iterator._item_to_value)
388386
self.assertEqual(iterator.max_results, limit)
389387
self.assertEqual(iterator.page_number, 0)
390388
self.assertEqual(iterator.next_page_token, start_cursor)

spanner/google/cloud/spanner_v1/client.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ def list_instance_configs(self, page_size=None, page_token=None):
205205
page_iter = self.instance_admin_api.list_instance_configs(
206206
path, page_size=page_size, metadata=metadata)
207207
page_iter.next_page_token = page_token
208-
page_iter._item_to_value = _item_to_instance_config
208+
page_iter.item_to_value = _item_to_instance_config
209209
return page_iter
210210

211211
def instance(self, instance_id,
@@ -265,7 +265,7 @@ def list_instances(self, filter_='', page_size=None, page_token=None):
265265
path = 'projects/%s' % (self.project,)
266266
page_iter = self.instance_admin_api.list_instances(
267267
path, page_size=page_size, metadata=metadata)
268-
page_iter._item_to_value = self._item_to_instance
268+
page_iter.item_to_value = self._item_to_instance
269269
page_iter.next_page_token = page_token
270270
return page_iter
271271

spanner/google/cloud/spanner_v1/instance.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def list_databases(self, page_size=None, page_token=None):
349349
page_iter = self._client.database_admin_api.list_databases(
350350
self.name, page_size=page_size, metadata=metadata)
351351
page_iter.next_page_token = page_token
352-
page_iter._item_to_value = self._item_to_database
352+
page_iter.item_to_value = self._item_to_database
353353
return page_iter
354354

355355
def _item_to_database(self, iterator, database_pb):

0 commit comments

Comments
 (0)