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