@@ -17,7 +17,7 @@ def request_builder(self):
1717
1818 @property
1919 def page_size (self ):
20- return len ( self ._items )
20+ return self ._page_size
2121
2222 def __init__ (self , api_call , page_creator ):
2323 self ._api_call = copy .deepcopy (api_call )
@@ -32,22 +32,23 @@ def __init__(self, api_call, page_creator):
3232 http_client_configuration = _http_client_configuration )
3333 self ._page = None
3434 self ._items = []
35+ self ._page_size = 0
3536 self ._current_index = 0
3637
3738 def __iter__ (self ):
3839 return self ._get_new_self_instance ()
3940
4041 def __next__ (self ):
41- if self ._current_index >= self .page_size :
42- _ , self ._items = self ._fetch_next_page ()
43- self ._current_index = 0
42+ if self ._current_index < self .page_size :
43+ item = self ._items [self ._current_index ]
44+ self ._current_index += 1
45+ return item
4446
47+ _ , self ._page = self ._fetch_next_page ()
48+ self ._items = self ._api_call .get_paginated_item_converter (self ._page )
4549 if not self ._items :
4650 raise StopIteration
47-
48- item = self ._items [self ._current_index ]
49- self ._current_index += 1
50- return item
51+ self ._page_size , self ._current_index = len (self ._items ), 0
5152
5253 def pages (self ):
5354 """
@@ -57,15 +58,16 @@ def pages(self):
5758 paginated_data = self ._get_new_self_instance ()
5859
5960 while True :
60- metadata , paginated_data ._page = paginated_data ._fetch_next_page (is_page_iterator = True )
61+ metadata , paginated_data ._page = paginated_data ._fetch_next_page ()
6162 if not paginated_data ._page or not metadata :
6263 break
6364 paginated_data ._items = self ._api_call .get_paginated_item_converter (paginated_data ._page )
6465 if not paginated_data ._items :
6566 break
67+ paginated_data ._page_size = len (paginated_data ._items )
6668 yield self ._page_creator (metadata , paginated_data ._page )
6769
68- def _fetch_next_page (self , is_page_iterator = False ):
70+ def _fetch_next_page (self ):
6971 for pagination_strategy in self ._pagination_strategies :
7072 request_builder = pagination_strategy .apply (self )
7173 if request_builder is None :
@@ -74,9 +76,7 @@ def _fetch_next_page(self, is_page_iterator=False):
7476 response = self ._api_call .clone (
7577 global_configuration = self ._global_configuration , request_builder = request_builder
7678 ).execute ()
77- response = response if is_page_iterator else self ._api_call .get_paginated_item_converter (response )
78- metadata = pagination_strategy .metadata if is_page_iterator else None
79- return metadata , response
79+ return pagination_strategy .metadata , response
8080 except Exception as ex :
8181 raise ex
8282 return []
0 commit comments