diff 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
line wrap: on
line diff
--- 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)