| 57 | |
| 58 | |
| 59 | class Pagination: |
| 60 | def __init__(self, results, per_page, page, endpoint): |
| 61 | self.results = results |
| 62 | self.per_page = per_page |
| 63 | self.page = page |
| 64 | self.endpoint = endpoint |
| 65 | |
| 66 | @cached_property |
| 67 | def count(self): |
| 68 | return len(self.results) |
| 69 | |
| 70 | @cached_property |
| 71 | def entries(self): |
| 72 | return self.results[ |
| 73 | ((self.page - 1) * self.per_page) : ( |
| 74 | ((self.page - 1) * self.per_page) + self.per_page |
| 75 | ) |
| 76 | ] |
| 77 | |
| 78 | @property |
| 79 | def has_previous(self): |
| 80 | """Return True if there are pages before the current one.""" |
| 81 | return self.page > 1 |
| 82 | |
| 83 | @property |
| 84 | def has_next(self): |
| 85 | """Return True if there are pages after the current one.""" |
| 86 | return self.page < self.pages |
| 87 | |
| 88 | @property |
| 89 | def previous(self): |
| 90 | """Return the URL for the previous page.""" |
| 91 | return url_for(self.endpoint, page=self.page - 1) |
| 92 | |
| 93 | @property |
| 94 | def next(self): |
| 95 | """Return the URL for the next page.""" |
| 96 | return url_for(self.endpoint, page=self.page + 1) |
| 97 | |
| 98 | @property |
| 99 | def pages(self): |
| 100 | """Return the number of pages.""" |
| 101 | return max(0, self.count - 1) // self.per_page + 1 |