comparison piecrust/data/paginator.py @ 852:4850f8c21b6e

core: Start of the big refactor for PieCrust 3.0. * Everything is a `ContentSource`, including assets directories. * Most content sources are subclasses of the base file-system source. * A source is processed by a "pipeline", and there are 2 built-in pipelines, one for assets and one for pages. The asset pipeline is vaguely functional, but the page pipeline is completely broken right now. * Rewrite the baking process as just running appropriate pipelines on each content item. This should allow for better parallelization.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 17 May 2017 00:11:48 -0700
parents a489162f2a17
children f070a4fc033c
comparison
equal deleted inserted replaced
851:2c7e57d80bba 852:4850f8c21b6e
9 logger = logging.getLogger(__name__) 9 logger = logging.getLogger(__name__)
10 10
11 11
12 class Paginator(object): 12 class Paginator(object):
13 debug_render = [ 13 debug_render = [
14 'has_more', 'items', 'has_items', 'items_per_page', 14 'has_more', 'items', 'has_items', 'items_per_page',
15 'items_this_page', 'prev_page_number', 'this_page_number', 15 'items_this_page', 'prev_page_number', 'this_page_number',
16 'next_page_number', 'prev_page', 'next_page', 16 'next_page_number', 'prev_page', 'next_page',
17 'total_item_count', 'total_page_count', 17 'total_item_count', 'total_page_count',
18 'next_item', 'prev_item'] 18 'next_item', 'prev_item']
19 debug_render_invoke = [ 19 debug_render_invoke = [
20 'has_more', 'items', 'has_items', 'items_per_page', 20 'has_more', 'items', 'has_items', 'items_per_page',
21 'items_this_page', 'prev_page_number', 'this_page_number', 21 'items_this_page', 'prev_page_number', 'this_page_number',
22 'next_page_number', 'prev_page', 'next_page', 22 'next_page_number', 'prev_page', 'next_page',
23 'total_item_count', 'total_page_count', 23 'total_item_count', 'total_page_count',
24 'next_item', 'prev_item'] 24 'next_item', 'prev_item']
25 25
26 def __init__(self, qualified_page, source, *, 26 def __init__(self, qualified_page, source, *,
27 page_num=1, pgn_filter=None, items_per_page=-1): 27 pgn_filter=None, items_per_page=-1):
28 self._parent_page = qualified_page 28 self._parent_page = qualified_page
29 self._page_num = qualified_page.page_num
29 self._source = source 30 self._source = source
30 self._page_num = page_num
31 self._iterator = None 31 self._iterator = None
32 self._pgn_filter = pgn_filter 32 self._pgn_filter = pgn_filter
33 self._items_per_page = items_per_page 33 self._items_per_page = items_per_page
34 self._pgn_set_on_ctx = False 34 self._pgn_set_on_ctx = False
35 35
87 @cached_property 87 @cached_property
88 def items_per_page(self): 88 def items_per_page(self):
89 if self._items_per_page > 0: 89 if self._items_per_page > 0:
90 return self._items_per_page 90 return self._items_per_page
91 if self._parent_page: 91 if self._parent_page:
92 ipp = self._parent_page.config.get('items_per_page') 92 ipp = self._parent_page.page.config.get('items_per_page')
93 if ipp is not None: 93 if ipp is not None:
94 return ipp 94 return ipp
95 if isinstance(self._source, IPaginationSource): 95 if isinstance(self._source, IPaginationSource):
96 return self._source.getItemsPerPage() 96 return self._source.getItemsPerPage()
97 raise Exception("No way to figure out how many items to display " 97 raise Exception("No way to figure out how many items to display "
193 offset = (self._page_num - 1) * self.items_per_page 193 offset = (self._page_num - 1) * self.items_per_page
194 current_page = None 194 current_page = None
195 if self._parent_page: 195 if self._parent_page:
196 current_page = self._parent_page.page 196 current_page = self._parent_page.page
197 self._iterator = PageIterator( 197 self._iterator = PageIterator(
198 self._source, 198 self._source,
199 current_page=current_page, 199 current_page=current_page,
200 pagination_filter=pag_filter, 200 pagination_filter=pag_filter,
201 offset=offset, limit=self.items_per_page, 201 offset=offset, limit=self.items_per_page,
202 locked=True) 202 locked=True)
203 self._iterator._iter_event += self._onIteration 203 self._iterator._iter_event += self._onIteration
204 204
205 def _getPaginationFilter(self): 205 def _getPaginationFilter(self):
206 f = PaginationFilter(value_accessor=page_value_accessor) 206 f = PaginationFilter(value_accessor=page_value_accessor)
207 207