Skip to content

Commit 4ec0d1b

Browse files
committed
refactors the code for items iterator
1 parent e76d070 commit 4ec0d1b

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

apimatic_core/pagination/paginated_data.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)