# HG changeset patch # User Ludovic Chabant # Date 1509347292 25200 # Node ID 492b66482f12242af016873001eb621ecf7416b8 # Parent 45ad976712ecdebce3e124718d2f704a88f28317 pagination: Fix bad bug where all pages triggered pagination. diff -r 45ad976712ec -r 492b66482f12 piecrust/data/paginator.py --- a/piecrust/data/paginator.py Sun Oct 29 22:51:57 2017 -0700 +++ b/piecrust/data/paginator.py Mon Oct 30 00:08:12 2017 -0700 @@ -1,6 +1,7 @@ import math import logging from werkzeug.utils import cached_property +from piecrust.sources.base import ContentSource logger = logging.getLogger(__name__) @@ -29,6 +30,7 @@ self._pgn_filter = pgn_filter self._items_per_page = items_per_page self._pgn_set_on_ctx = False + self._is_content_source = isinstance(source, ContentSource) @property def is_loaded(self): @@ -91,8 +93,7 @@ if ipp is not None: return ipp - from piecrust.sources.base import ContentSource - if isinstance(self._source, ContentSource): + if self._is_content_source: ipp = self._source.config.get('items_per_page') if ipp is not None: return ipp @@ -191,7 +192,6 @@ from piecrust.data.filters import PaginationFilter from piecrust.dataproviders.pageiterator import ( PageIterator, HardCodedFilterIterator) - from piecrust.sources.base import ContentSource self._iterator = PageIterator( self._source, @@ -207,11 +207,10 @@ limit = self.items_per_page self._iterator.slice(offset, limit) - self._iterator._lockIterator() - self._iterator._load() + if self._is_content_source: + self._iterator._iter_event += self._onIteration - if isinstance(self._source, ContentSource): - self._onIteration(self._iterator) + self._iterator._lockIterator() def _getPageUri(self, index): return self._page.getUri(index) diff -r 45ad976712ec -r 492b66482f12 piecrust/dataproviders/blog.py --- a/piecrust/dataproviders/blog.py Sun Oct 29 22:51:57 2017 -0700 +++ b/piecrust/dataproviders/blog.py Mon Oct 30 00:08:12 2017 -0700 @@ -70,7 +70,7 @@ def _buildPosts(self): if self._posts is None: it = PageIterator(self._sources[0], current_page=self._page) - it._iter_event += self._onIteration + it._load_event += self._onIteration self._posts = it def _buildArchives(self): diff -r 45ad976712ec -r 492b66482f12 piecrust/dataproviders/pageiterator.py --- a/piecrust/dataproviders/pageiterator.py Sun Oct 29 22:51:57 2017 -0700 +++ b/piecrust/dataproviders/pageiterator.py Mon Oct 30 00:08:12 2017 -0700 @@ -77,7 +77,7 @@ combined_source = _CombinedSource(list(reversed(self._sources))) self._it = PageIterator(combined_source, current_page=self._page) - self._it._iter_event += self._onIteration + self._it._load_event += self._onIteration def _onIteration(self, it): if not self._iterated: @@ -106,6 +106,7 @@ self._next_page = None self._prev_page = None self._locked = False + self._load_event = Event() self._iter_event = Event() self._current_page = current_page self._initIterator() @@ -137,6 +138,7 @@ def __iter__(self): self._load() + self._iter_event.fire(self) return iter(self._cache) def __getattr__(self, name): @@ -203,10 +205,6 @@ return self._pagination_slicer.has_more return False - @property - def _is_loaded_and_has_more(self): - return self._is_loaded and self._has_more - def _simpleWrap(self, it_class, *args, **kwargs): self._ensureUnlocked() self._ensureUnloaded() @@ -296,7 +294,7 @@ pn_it = PaginationDataBuilderIterator(iter(pn)) self._prev_page, self._next_page = (list(pn_it)) - self._iter_event.fire(self) + self._load_event.fire(self) def _debugRenderDoc(self): return "Contains %d items" % len(self)