changeset 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 cde2362f4aff
children afd230972167
files piecrust/data/paginationdata.py
diffstat 1 files changed, 25 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/data/paginationdata.py	Sat Oct 07 12:32:25 2017 -0700
+++ b/piecrust/data/paginationdata.py	Sat Oct 07 12:32:48 2017 -0700
@@ -16,7 +16,6 @@
         from piecrust.uriutil import split_uri
 
         page = self._page
-        dt = page.datetime
         set_val = self._setValue
 
         page_url = page.getUri()
@@ -25,17 +24,16 @@
         set_val('rel_url', rel_url)
         set_val('slug', rel_url)  # For backwards compatibility
         set_val('route', copy.deepcopy(page.source_metadata['route_params']))
-        set_val('timestamp', time.mktime(page.datetime.timetuple()))
-        set_val('datetime', {
-            'year': dt.year, 'month': dt.month, 'day': dt.day,
-            'hour': dt.hour, 'minute': dt.minute, 'second': dt.second})
-        set_val('mtime', page.content_mtime)
 
         self._mapLoader('date', _load_date)
+        self._mapLoader('datetime', _load_datetime)
+        self._mapLoader('timestamp', _load_timestamp)
+        self._mapLoader('mtime', _load_content_mtime)
         self._mapLoader('assets', _load_assets)
 
         segment_names = page.config.get('segments')
         for name in segment_names:
+            self._mapLoader('raw_' + name, _load_raw_segment)
             self._mapLoader(name, _load_rendered_segment)
 
 
@@ -52,6 +50,27 @@
     return None
 
 
+def _load_datetime(data, name):
+    dt = data_page.datetime
+    return {
+        'year': dt.year, 'month': dt.month, 'day': dt.day,
+        'hour': dt.hour, 'minute': dt.minute, 'second': dt.second}
+
+
+def _load_timestamp(data, name):
+    page = data._page
+    return time.mktime(page.datetime.timetuple())
+
+
+def _load_content_mtime(data, name):
+    return data._page.content_mtime
+
+
+def _load_raw_segment(data, name):
+    page = data._page
+    return page.getSegment(name[4:])
+
+
 def _load_rendered_segment(data, name):
     page = data._page