Mercurial > piecrust2
comparison piecrust/dataproviders/pageiterator.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 | d4e0c53aa6e8 |
comparison
equal
deleted
inserted
replaced
979:45ad976712ec | 982:492b66482f12 |
---|---|
75 if self._it is not None: | 75 if self._it is not None: |
76 return | 76 return |
77 | 77 |
78 combined_source = _CombinedSource(list(reversed(self._sources))) | 78 combined_source = _CombinedSource(list(reversed(self._sources))) |
79 self._it = PageIterator(combined_source, current_page=self._page) | 79 self._it = PageIterator(combined_source, current_page=self._page) |
80 self._it._iter_event += self._onIteration | 80 self._it._load_event += self._onIteration |
81 | 81 |
82 def _onIteration(self, it): | 82 def _onIteration(self, it): |
83 if not self._iterated: | 83 if not self._iterated: |
84 rcs = self._app.env.render_ctx_stack | 84 rcs = self._app.env.render_ctx_stack |
85 rcs.current_ctx.addUsedSource(it._source) | 85 rcs.current_ctx.addUsedSource(it._source) |
104 self._pagination_slicer = None | 104 self._pagination_slicer = None |
105 self._has_sorter = False | 105 self._has_sorter = False |
106 self._next_page = None | 106 self._next_page = None |
107 self._prev_page = None | 107 self._prev_page = None |
108 self._locked = False | 108 self._locked = False |
109 self._load_event = Event() | |
109 self._iter_event = Event() | 110 self._iter_event = Event() |
110 self._current_page = current_page | 111 self._current_page = current_page |
111 self._initIterator() | 112 self._initIterator() |
112 | 113 |
113 @property | 114 @property |
135 self._load() | 136 self._load() |
136 return self._cache[key] | 137 return self._cache[key] |
137 | 138 |
138 def __iter__(self): | 139 def __iter__(self): |
139 self._load() | 140 self._load() |
141 self._iter_event.fire(self) | |
140 return iter(self._cache) | 142 return iter(self._cache) |
141 | 143 |
142 def __getattr__(self, name): | 144 def __getattr__(self, name): |
143 if name[:3] == 'is_' or name[:3] == 'in_': | 145 if name[:3] == 'is_' or name[:3] == 'in_': |
144 def is_filter(value): | 146 def is_filter(value): |
201 self._load() | 203 self._load() |
202 if self._pagination_slicer: | 204 if self._pagination_slicer: |
203 return self._pagination_slicer.has_more | 205 return self._pagination_slicer.has_more |
204 return False | 206 return False |
205 | 207 |
206 @property | |
207 def _is_loaded_and_has_more(self): | |
208 return self._is_loaded and self._has_more | |
209 | |
210 def _simpleWrap(self, it_class, *args, **kwargs): | 208 def _simpleWrap(self, it_class, *args, **kwargs): |
211 self._ensureUnlocked() | 209 self._ensureUnlocked() |
212 self._ensureUnloaded() | 210 self._ensureUnloaded() |
213 self._ensureSorter() | 211 self._ensureSorter() |
214 self._it = it_class(self._it, *args, **kwargs) | 212 self._it = it_class(self._it, *args, **kwargs) |
294 pn = [self._pagination_slicer.prev_page, | 292 pn = [self._pagination_slicer.prev_page, |
295 self._pagination_slicer.next_page] | 293 self._pagination_slicer.next_page] |
296 pn_it = PaginationDataBuilderIterator(iter(pn)) | 294 pn_it = PaginationDataBuilderIterator(iter(pn)) |
297 self._prev_page, self._next_page = (list(pn_it)) | 295 self._prev_page, self._next_page = (list(pn_it)) |
298 | 296 |
299 self._iter_event.fire(self) | 297 self._load_event.fire(self) |
300 | 298 |
301 def _debugRenderDoc(self): | 299 def _debugRenderDoc(self): |
302 return "Contains %d items" % len(self) | 300 return "Contains %d items" % len(self) |
303 | 301 |
304 | 302 |