Mercurial > piecrust2
comparison piecrust/data/paginationdata.py @ 853:f070a4fc033c
core: Continue PieCrust3 refactor, simplify pages.
The asset pipeline is still the only function pipeline at this point.
* No more `QualifiedPage`, and several other pieces of code deleted.
* Data providers are simpler and more focused. For instance, the page iterator
doesn't try to support other types of items.
* Route parameters are proper known source metadata to remove the confusion
between the two.
* Make the baker and pipeline more correctly manage records and record
histories.
* Add support for record collapsing and deleting stale outputs in the asset
pipeline.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 21 May 2017 00:06:59 -0700 |
parents | 4850f8c21b6e |
children | 08e02c2a2a1a |
comparison
equal
deleted
inserted
replaced
852:4850f8c21b6e | 853:f070a4fc033c |
---|---|
5 | 5 |
6 logger = logging.getLogger(__name__) | 6 logger = logging.getLogger(__name__) |
7 | 7 |
8 | 8 |
9 class PaginationData(LazyPageConfigData): | 9 class PaginationData(LazyPageConfigData): |
10 def __init__(self, qualified_page): | 10 def __init__(self, page): |
11 super(PaginationData, self).__init__(qualified_page.page) | 11 super().__init__(page) |
12 self._qualified_page = qualified_page | |
13 | 12 |
14 def _load(self): | 13 def _load(self): |
14 from piecrust.data.assetor import Assetor | |
15 from piecrust.uriutil import split_uri | 15 from piecrust.uriutil import split_uri |
16 | 16 |
17 page = self._page | 17 page = self._page |
18 dt = page.datetime | 18 dt = page.datetime |
19 page_url = self._qualified_page.uri | 19 page_url = page.getUri() |
20 _, slug = split_uri(page.app, page_url) | 20 _, slug = split_uri(page.app, page_url) |
21 self._setValue('url', page_url) | 21 self._setValue('url', page_url) |
22 self._setValue('slug', slug) | 22 self._setValue('slug', slug) |
23 self._setValue( | 23 self._setValue('timestamp', |
24 'timestamp', | 24 time.mktime(page.datetime.timetuple())) |
25 time.mktime(page.datetime.timetuple())) | |
26 self._setValue('datetime', { | 25 self._setValue('datetime', { |
27 'year': dt.year, 'month': dt.month, 'day': dt.day, | 26 'year': dt.year, 'month': dt.month, 'day': dt.day, |
28 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second}) | 27 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second}) |
29 date_format = page.app.config.get('site/date_format') | 28 date_format = page.app.config.get('site/date_format') |
30 if date_format: | 29 if date_format: |
31 self._setValue('date', page.datetime.strftime(date_format)) | 30 self._setValue('date', page.datetime.strftime(date_format)) |
32 self._setValue('mtime', page.path_mtime) | 31 self._setValue('mtime', page.content_mtime) |
33 | 32 |
34 assetor = page.source.buildAssetor(page, page_url) | 33 assetor = Assetor(page) |
35 self._setValue('assets', assetor) | 34 self._setValue('assets', assetor) |
36 | 35 |
37 segment_names = page.config.get('segments') | 36 segment_names = page.config.get('segments') |
38 for name in segment_names: | 37 for name in segment_names: |
39 self._mapLoader(name, self._load_rendered_segment) | 38 self._mapLoader(name, self._load_rendered_segment) |
48 do_render = False | 47 do_render = False |
49 | 48 |
50 assert self is data | 49 assert self is data |
51 | 50 |
52 if do_render: | 51 if do_render: |
53 uri = self._qualified_page.uri | 52 uri = self.getUri() |
54 try: | 53 try: |
55 from piecrust.rendering import ( | 54 from piecrust.rendering import ( |
56 RenderingContext, render_page_segments) | 55 RenderingContext, render_page_segments) |
57 ctx = RenderingContext(self._qualified_page) | 56 ctx = RenderingContext(self._page) |
58 render_result = render_page_segments(ctx) | 57 render_result = render_page_segments(ctx) |
59 segs = render_result.segments | 58 segs = render_result.segments |
60 except Exception as ex: | 59 except Exception as ex: |
61 logger.exception(ex) | 60 logger.exception(ex) |
62 raise Exception( | 61 raise Exception( |