diff piecrust/data/pagedata.py @ 874:f4608e2e80ce

data: Optimize page data creation. `datetime.strftime` was pretty costly so it's no lazily-computed in some places, and replaced with some better alternative elsewhere.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 15 Jun 2017 07:31:50 -0700
parents 08e02c2a2a1a
children d6d35b2efd04
line wrap: on
line diff
--- a/piecrust/data/pagedata.py	Thu Jun 15 07:30:44 2017 -0700
+++ b/piecrust/data/pagedata.py	Thu Jun 15 07:31:50 2017 -0700
@@ -162,15 +162,23 @@
 
     def _load(self):
         page = self._page
+        set_val = self._setValue
+
         dt = page.datetime
         for k, v in page.source_metadata.items():
-            self._setValue(k, v)
-        self._setValue('url', self._page.getUri(self._ctx.sub_num))
-        self._setValue('timestamp', time.mktime(dt.timetuple()))
-        self._setValue('datetime', {
+            set_val(k, v)
+        set_val('url', page.getUri(self._ctx.sub_num))
+        set_val('timestamp', time.mktime(dt.timetuple()))
+        set_val('datetime', {
             'year': dt.year, 'month': dt.month, 'day': dt.day,
             'hour': dt.hour, 'minute': dt.minute, 'second': dt.second})
-        date_format = page.app.config.get('site/date_format')
-        if date_format:
-            self._setValue('date', page.datetime.strftime(date_format))
+
+        self._mapLoader('date', _load_date)
+
 
+def _load_date(data, name):
+    page = data._page
+    date_format = page.app.config.get('site/date_format')
+    if date_format:
+        return page.datetime.strftime(date_format)
+    return None