Mercurial > piecrust2
comparison piecrust/data/paginator.py @ 982:492b66482f12
pagination: Fix bad bug where all pages triggered pagination.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 30 Oct 2017 00:08:12 -0700 |
parents | 45ad976712ec |
children | 1c324407bd1f |
comparison
equal
deleted
inserted
replaced
979:45ad976712ec | 982:492b66482f12 |
---|---|
1 import math | 1 import math |
2 import logging | 2 import logging |
3 from werkzeug.utils import cached_property | 3 from werkzeug.utils import cached_property |
4 from piecrust.sources.base import ContentSource | |
4 | 5 |
5 | 6 |
6 logger = logging.getLogger(__name__) | 7 logger = logging.getLogger(__name__) |
7 | 8 |
8 | 9 |
27 self._sub_num = sub_num | 28 self._sub_num = sub_num |
28 self._iterator = None | 29 self._iterator = None |
29 self._pgn_filter = pgn_filter | 30 self._pgn_filter = pgn_filter |
30 self._items_per_page = items_per_page | 31 self._items_per_page = items_per_page |
31 self._pgn_set_on_ctx = False | 32 self._pgn_set_on_ctx = False |
33 self._is_content_source = isinstance(source, ContentSource) | |
32 | 34 |
33 @property | 35 @property |
34 def is_loaded(self): | 36 def is_loaded(self): |
35 return self._iterator is not None | 37 return self._iterator is not None |
36 | 38 |
89 if self._page is not None: | 91 if self._page is not None: |
90 ipp = self._page.config.get('items_per_page') | 92 ipp = self._page.config.get('items_per_page') |
91 if ipp is not None: | 93 if ipp is not None: |
92 return ipp | 94 return ipp |
93 | 95 |
94 from piecrust.sources.base import ContentSource | 96 if self._is_content_source: |
95 if isinstance(self._source, ContentSource): | |
96 ipp = self._source.config.get('items_per_page') | 97 ipp = self._source.config.get('items_per_page') |
97 if ipp is not None: | 98 if ipp is not None: |
98 return ipp | 99 return ipp |
99 | 100 |
100 raise Exception("No way to figure out how many items to display " | 101 raise Exception("No way to figure out how many items to display " |
189 return | 190 return |
190 | 191 |
191 from piecrust.data.filters import PaginationFilter | 192 from piecrust.data.filters import PaginationFilter |
192 from piecrust.dataproviders.pageiterator import ( | 193 from piecrust.dataproviders.pageiterator import ( |
193 PageIterator, HardCodedFilterIterator) | 194 PageIterator, HardCodedFilterIterator) |
194 from piecrust.sources.base import ContentSource | |
195 | 195 |
196 self._iterator = PageIterator( | 196 self._iterator = PageIterator( |
197 self._source, | 197 self._source, |
198 current_page=self._page) | 198 current_page=self._page) |
199 | 199 |
205 | 205 |
206 offset = (self._sub_num - 1) * self.items_per_page | 206 offset = (self._sub_num - 1) * self.items_per_page |
207 limit = self.items_per_page | 207 limit = self.items_per_page |
208 self._iterator.slice(offset, limit) | 208 self._iterator.slice(offset, limit) |
209 | 209 |
210 if self._is_content_source: | |
211 self._iterator._iter_event += self._onIteration | |
212 | |
210 self._iterator._lockIterator() | 213 self._iterator._lockIterator() |
211 self._iterator._load() | |
212 | |
213 if isinstance(self._source, ContentSource): | |
214 self._onIteration(self._iterator) | |
215 | 214 |
216 def _getPageUri(self, index): | 215 def _getPageUri(self, index): |
217 return self._page.getUri(index) | 216 return self._page.getUri(index) |
218 | 217 |
219 def _onIteration(self, it): | 218 def _onIteration(self, it): |