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(