Mercurial > piecrust2
comparison piecrust/data/paginator.py @ 867:757fba54bfd3
refactor: Improve pagination and iterators to work with other sources.
This makes the assets work as a pagination source again.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 12 Jun 2017 22:20:58 -0700 |
parents | 08e02c2a2a1a |
children | dcdec4b951a1 |
comparison
equal
deleted
inserted
replaced
866:d9059257743c | 867:757fba54bfd3 |
---|---|
88 | 88 |
89 ipp = self._page.config.get('items_per_page') | 89 ipp = self._page.config.get('items_per_page') |
90 if ipp is not None: | 90 if ipp is not None: |
91 return ipp | 91 return ipp |
92 | 92 |
93 ipp = self._source.config.get('items_per_page') | 93 from piecrust.sources.base import ContentSource |
94 if ipp is not None: | 94 if isinstance(self._source, ContentSource): |
95 return ipp | 95 ipp = self._source.config.get('items_per_page') |
96 if ipp is not None: | |
97 return ipp | |
96 | 98 |
97 raise Exception("No way to figure out how many items to display " | 99 raise Exception("No way to figure out how many items to display " |
98 "per page.") | 100 "per page.") |
99 | 101 |
100 @property | 102 @property |
186 return | 188 return |
187 | 189 |
188 from piecrust.data.filters import PaginationFilter | 190 from piecrust.data.filters import PaginationFilter |
189 from piecrust.dataproviders.pageiterator import ( | 191 from piecrust.dataproviders.pageiterator import ( |
190 PageIterator, HardCodedFilterIterator) | 192 PageIterator, HardCodedFilterIterator) |
193 from piecrust.sources.base import ContentSource | |
191 | 194 |
192 self._iterator = PageIterator( | 195 self._iterator = PageIterator( |
193 self._source, | 196 self._source, |
194 current_page=self._page) | 197 current_page=self._page) |
195 #self._iterator._iter_event += self._onIteration | |
196 | 198 |
197 if self._pgn_filter is not None: | 199 if self._pgn_filter is not None: |
198 pag_fil = PaginationFilter() | 200 pag_fil = PaginationFilter() |
199 pag_fil.addClause(self._pgn_filter.root_clause) | 201 pag_fil.addClause(self._pgn_filter.root_clause) |
200 self._iterator._simpleNonSortedWrap( | 202 self._iterator._simpleNonSortedWrap( |
204 limit = self.items_per_page | 206 limit = self.items_per_page |
205 self._iterator.slice(offset, limit) | 207 self._iterator.slice(offset, limit) |
206 | 208 |
207 self._iterator._lockIterator() | 209 self._iterator._lockIterator() |
208 | 210 |
209 self._onIteration(self._iterator) | 211 if isinstance(self._source, ContentSource): |
212 self._onIteration(self._iterator) | |
210 | 213 |
211 def _getPageUri(self, index): | 214 def _getPageUri(self, index): |
212 return self._page.getUri(index) | 215 return self._page.getUri(index) |
213 | 216 |
214 def _onIteration(self, it): | 217 def _onIteration(self, it): |