comparison 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
comparison
equal deleted inserted replaced
979:45ad976712ec 982:492b66482f12
1 import math 1 import math
2 import logging 2 import logging
3 from werkzeug.utils import cached_property 3 from werkzeug.utils import cached_property
4 from piecrust.sources.base import ContentSource
4 5
5 6
6 logger = logging.getLogger(__name__) 7 logger = logging.getLogger(__name__)
7 8
8 9
27 self._sub_num = sub_num 28 self._sub_num = sub_num
28 self._iterator = None 29 self._iterator = None
29 self._pgn_filter = pgn_filter 30 self._pgn_filter = pgn_filter
30 self._items_per_page = items_per_page 31 self._items_per_page = items_per_page
31 self._pgn_set_on_ctx = False 32 self._pgn_set_on_ctx = False
33 self._is_content_source = isinstance(source, ContentSource)
32 34
33 @property 35 @property
34 def is_loaded(self): 36 def is_loaded(self):
35 return self._iterator is not None 37 return self._iterator is not None
36 38
89 if self._page is not None: 91 if self._page is not None:
90 ipp = self._page.config.get('items_per_page') 92 ipp = self._page.config.get('items_per_page')
91 if ipp is not None: 93 if ipp is not None:
92 return ipp 94 return ipp
93 95
94 from piecrust.sources.base import ContentSource 96 if self._is_content_source:
95 if isinstance(self._source, ContentSource):
96 ipp = self._source.config.get('items_per_page') 97 ipp = self._source.config.get('items_per_page')
97 if ipp is not None: 98 if ipp is not None:
98 return ipp 99 return ipp
99 100
100 raise Exception("No way to figure out how many items to display " 101 raise Exception("No way to figure out how many items to display "
189 return 190 return
190 191
191 from piecrust.data.filters import PaginationFilter 192 from piecrust.data.filters import PaginationFilter
192 from piecrust.dataproviders.pageiterator import ( 193 from piecrust.dataproviders.pageiterator import (
193 PageIterator, HardCodedFilterIterator) 194 PageIterator, HardCodedFilterIterator)
194 from piecrust.sources.base import ContentSource
195 195
196 self._iterator = PageIterator( 196 self._iterator = PageIterator(
197 self._source, 197 self._source,
198 current_page=self._page) 198 current_page=self._page)
199 199
205 205
206 offset = (self._sub_num - 1) * self.items_per_page 206 offset = (self._sub_num - 1) * self.items_per_page
207 limit = self.items_per_page 207 limit = self.items_per_page
208 self._iterator.slice(offset, limit) 208 self._iterator.slice(offset, limit)
209 209
210 if self._is_content_source:
211 self._iterator._iter_event += self._onIteration
212
210 self._iterator._lockIterator() 213 self._iterator._lockIterator()
211 self._iterator._load()
212
213 if isinstance(self._source, ContentSource):
214 self._onIteration(self._iterator)
215 214
216 def _getPageUri(self, index): 215 def _getPageUri(self, index):
217 return self._page.getUri(index) 216 return self._page.getUri(index)
218 217
219 def _onIteration(self, it): 218 def _onIteration(self, it):