Mercurial > piecrust2
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 |