comparison piecrust/data/paginationdata.py @ 966:cc55740860de

data: Delay loading page configuration and datetimes.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 07 Oct 2017 12:32:48 -0700
parents b447c24bc8d4
children 45ad976712ec
comparison
equal deleted inserted replaced
965:cde2362f4aff 966:cc55740860de
14 14
15 def _load(self): 15 def _load(self):
16 from piecrust.uriutil import split_uri 16 from piecrust.uriutil import split_uri
17 17
18 page = self._page 18 page = self._page
19 dt = page.datetime
20 set_val = self._setValue 19 set_val = self._setValue
21 20
22 page_url = page.getUri() 21 page_url = page.getUri()
23 _, rel_url = split_uri(page.app, page_url) 22 _, rel_url = split_uri(page.app, page_url)
24 set_val('url', page_url) 23 set_val('url', page_url)
25 set_val('rel_url', rel_url) 24 set_val('rel_url', rel_url)
26 set_val('slug', rel_url) # For backwards compatibility 25 set_val('slug', rel_url) # For backwards compatibility
27 set_val('route', copy.deepcopy(page.source_metadata['route_params'])) 26 set_val('route', copy.deepcopy(page.source_metadata['route_params']))
28 set_val('timestamp', time.mktime(page.datetime.timetuple()))
29 set_val('datetime', {
30 'year': dt.year, 'month': dt.month, 'day': dt.day,
31 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second})
32 set_val('mtime', page.content_mtime)
33 27
34 self._mapLoader('date', _load_date) 28 self._mapLoader('date', _load_date)
29 self._mapLoader('datetime', _load_datetime)
30 self._mapLoader('timestamp', _load_timestamp)
31 self._mapLoader('mtime', _load_content_mtime)
35 self._mapLoader('assets', _load_assets) 32 self._mapLoader('assets', _load_assets)
36 33
37 segment_names = page.config.get('segments') 34 segment_names = page.config.get('segments')
38 for name in segment_names: 35 for name in segment_names:
36 self._mapLoader('raw_' + name, _load_raw_segment)
39 self._mapLoader(name, _load_rendered_segment) 37 self._mapLoader(name, _load_rendered_segment)
40 38
41 39
42 def _load_assets(data, name): 40 def _load_assets(data, name):
43 from piecrust.data.assetor import Assetor 41 from piecrust.data.assetor import Assetor
48 page = data._page 46 page = data._page
49 date_format = page.app.config.get('site/date_format') 47 date_format = page.app.config.get('site/date_format')
50 if date_format: 48 if date_format:
51 return page.datetime.strftime(date_format) 49 return page.datetime.strftime(date_format)
52 return None 50 return None
51
52
53 def _load_datetime(data, name):
54 dt = data_page.datetime
55 return {
56 'year': dt.year, 'month': dt.month, 'day': dt.day,
57 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second}
58
59
60 def _load_timestamp(data, name):
61 page = data._page
62 return time.mktime(page.datetime.timetuple())
63
64
65 def _load_content_mtime(data, name):
66 return data._page.content_mtime
67
68
69 def _load_raw_segment(data, name):
70 page = data._page
71 return page.getSegment(name[4:])
53 72
54 73
55 def _load_rendered_segment(data, name): 74 def _load_rendered_segment(data, name):
56 page = data._page 75 page = data._page
57 76