Mercurial > piecrust2
comparison piecrust/data/paginator.py @ 854:08e02c2a2a1a
core: Keep refactoring, this time to prepare for generator sources.
- Make a few APIs simpler.
- Content pipelines create their own jobs, so that generator sources can
keep aborting in `getContents`, but rely on their pipeline to generate
pages for baking.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 04 Jun 2017 23:34:28 -0700 |
parents | f070a4fc033c |
children | 757fba54bfd3 |
comparison
equal
deleted
inserted
replaced
853:f070a4fc033c | 854:08e02c2a2a1a |
---|---|
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') | |
94 if ipp is not None: | |
95 return ipp | |
96 | |
93 raise Exception("No way to figure out how many items to display " | 97 raise Exception("No way to figure out how many items to display " |
94 "per page.") | 98 "per page.") |
95 | 99 |
96 @property | 100 @property |
97 def items_this_page(self): | 101 def items_this_page(self): |
180 def _load(self): | 184 def _load(self): |
181 if self._iterator is not None: | 185 if self._iterator is not None: |
182 return | 186 return |
183 | 187 |
184 from piecrust.data.filters import PaginationFilter | 188 from piecrust.data.filters import PaginationFilter |
185 from piecrust.dataproviders.page_iterator import PageIterator | 189 from piecrust.dataproviders.pageiterator import ( |
186 | 190 PageIterator, HardCodedFilterIterator) |
187 pag_filter = PaginationFilter() | |
188 if self._pgn_filter is not None: | |
189 pag_filter.addClause(self._pgn_filter.root_clause) | |
190 | 191 |
191 self._iterator = PageIterator( | 192 self._iterator = PageIterator( |
192 self._source, | 193 self._source, |
193 current_page=self._page, | 194 current_page=self._page) |
194 pagination_filter=pag_filter, | 195 #self._iterator._iter_event += self._onIteration |
195 locked=True) | 196 |
196 self._iterator._iter_event += self._onIteration | 197 if self._pgn_filter is not None: |
198 pag_fil = PaginationFilter() | |
199 pag_fil.addClause(self._pgn_filter.root_clause) | |
200 self._iterator._simpleNonSortedWrap( | |
201 HardCodedFilterIterator, pag_fil) | |
197 | 202 |
198 offset = (self._sub_num - 1) * self.items_per_page | 203 offset = (self._sub_num - 1) * self.items_per_page |
199 limit = self.items_per_page | 204 limit = self.items_per_page |
200 self._iterator.slice(offset, limit) | 205 self._iterator.slice(offset, limit) |
201 | 206 |
207 self._iterator._lockIterator() | |
208 | |
209 self._onIteration(self._iterator) | |
210 | |
202 def _getPageUri(self, index): | 211 def _getPageUri(self, index): |
203 return self._page.getUri(index) | 212 return self._page.getUri(index) |
204 | 213 |
205 def _onIteration(self): | 214 def _onIteration(self, it): |
206 if not self._pgn_set_on_ctx: | 215 if not self._pgn_set_on_ctx: |
207 eis = self._page.app.env.exec_info_stack | 216 rcs = self._page.app.env.render_ctx_stack |
208 eis.current_page_info.render_ctx.setPagination(self) | 217 rcs.current_ctx.setPagination(self) |
209 self._pgn_set_on_ctx = True | 218 self._pgn_set_on_ctx = True |
210 | 219 |