This Condition leads to infinite recursion.
if self.page == 1:
return self
I trying to handle a paginated response from an API, So I created PaginatedResponse
class to manage it.
I wanted my class to iterable so I add a __iter__
method inside and returned the self or next page depending on Page attribute in my instance now I face the problem that I am stuck in the first next() and I can't seem to fix it.
from math import ceil
class PaginatedResponse:
def __init__(self, response) -> None:
self.response = response
self.attrs = response.body()
self.total_results = self.attrs.get("total_results")
self.page = self.attrs.get("page")
self.per_page = self.attrs.get("per_page")
self.prev_page = self.attrs.get("prev_page")
self.next_page = self.attrs.get("next_page")
def total_pages(self) -> int:
return ceil(self.total_results / self.per_page)
def __iter__(self):
return self
def __next__(self):
if self.page > self.total_pages():
return StopIteration
print(self.page, end=" -> ")
if self.page == 1:
return self
return self.get_next_page()
def get_next_page(self):
if not self.next_page:
return None
self._request.params = {
"page": self.page + 1,
}
self = PaginatedResponse(self._request.send())
return self
def get_prev_page(self):
if not self.prev_page:
return None
self._request.params = {
"page": self.page - 1,
}
self = PaginatedResponse(self._request.send())
return self
@property
def _request(self):
return self.response.request
I tried to change the conditions, but I can't manage to make it work. I did try to make it always return self.get_next_page()
but that led to my skipping page 1 of the response.