comparison piecrust/data/paginator.py @ 867:757fba54bfd3

refactor: Improve pagination and iterators to work with other sources. This makes the assets work as a pagination source again.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 12 Jun 2017 22:20:58 -0700
parents 08e02c2a2a1a
children dcdec4b951a1
comparison
equal deleted inserted replaced
866:d9059257743c 867:757fba54bfd3
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') 93 from piecrust.sources.base import ContentSource
94 if ipp is not None: 94 if isinstance(self._source, ContentSource):
95 return ipp 95 ipp = self._source.config.get('items_per_page')
96 if ipp is not None:
97 return ipp
96 98
97 raise Exception("No way to figure out how many items to display " 99 raise Exception("No way to figure out how many items to display "
98 "per page.") 100 "per page.")
99 101
100 @property 102 @property
186 return 188 return
187 189
188 from piecrust.data.filters import PaginationFilter 190 from piecrust.data.filters import PaginationFilter
189 from piecrust.dataproviders.pageiterator import ( 191 from piecrust.dataproviders.pageiterator import (
190 PageIterator, HardCodedFilterIterator) 192 PageIterator, HardCodedFilterIterator)
193 from piecrust.sources.base import ContentSource
191 194
192 self._iterator = PageIterator( 195 self._iterator = PageIterator(
193 self._source, 196 self._source,
194 current_page=self._page) 197 current_page=self._page)
195 #self._iterator._iter_event += self._onIteration
196 198
197 if self._pgn_filter is not None: 199 if self._pgn_filter is not None:
198 pag_fil = PaginationFilter() 200 pag_fil = PaginationFilter()
199 pag_fil.addClause(self._pgn_filter.root_clause) 201 pag_fil.addClause(self._pgn_filter.root_clause)
200 self._iterator._simpleNonSortedWrap( 202 self._iterator._simpleNonSortedWrap(
204 limit = self.items_per_page 206 limit = self.items_per_page
205 self._iterator.slice(offset, limit) 207 self._iterator.slice(offset, limit)
206 208
207 self._iterator._lockIterator() 209 self._iterator._lockIterator()
208 210
209 self._onIteration(self._iterator) 211 if isinstance(self._source, ContentSource):
212 self._onIteration(self._iterator)
210 213
211 def _getPageUri(self, index): 214 def _getPageUri(self, index):
212 return self._page.getUri(index) 215 return self._page.getUri(index)
213 216
214 def _onIteration(self, it): 217 def _onIteration(self, it):