Mercurial > piecrust2
diff 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 |
line wrap: on
line diff
--- a/piecrust/data/paginator.py Sun May 21 00:06:59 2017 -0700 +++ b/piecrust/data/paginator.py Sun Jun 04 23:34:28 2017 -0700 @@ -90,6 +90,10 @@ if ipp is not None: return ipp + ipp = self._source.config.get('items_per_page') + if ipp is not None: + return ipp + raise Exception("No way to figure out how many items to display " "per page.") @@ -182,29 +186,34 @@ return from piecrust.data.filters import PaginationFilter - from piecrust.dataproviders.page_iterator import PageIterator - - pag_filter = PaginationFilter() - if self._pgn_filter is not None: - pag_filter.addClause(self._pgn_filter.root_clause) + from piecrust.dataproviders.pageiterator import ( + PageIterator, HardCodedFilterIterator) self._iterator = PageIterator( self._source, - current_page=self._page, - pagination_filter=pag_filter, - locked=True) - self._iterator._iter_event += self._onIteration + current_page=self._page) + #self._iterator._iter_event += self._onIteration + + if self._pgn_filter is not None: + pag_fil = PaginationFilter() + pag_fil.addClause(self._pgn_filter.root_clause) + self._iterator._simpleNonSortedWrap( + HardCodedFilterIterator, pag_fil) offset = (self._sub_num - 1) * self.items_per_page limit = self.items_per_page self._iterator.slice(offset, limit) + self._iterator._lockIterator() + + self._onIteration(self._iterator) + def _getPageUri(self, index): return self._page.getUri(index) - def _onIteration(self): + def _onIteration(self, it): if not self._pgn_set_on_ctx: - eis = self._page.app.env.exec_info_stack - eis.current_page_info.render_ctx.setPagination(self) + rcs = self._page.app.env.render_ctx_stack + rcs.current_ctx.setPagination(self) self._pgn_set_on_ctx = True