diff piecrust/data/base.py @ 420:f1b759c188b0

internal: Optimize page data building. Instead of loading the page to get its configuration, use a lazy-loader.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 20 Jun 2015 23:27:04 -0700
parents 0e9a94b7fdfa
children 21e26ed867b6
line wrap: on
line diff
--- a/piecrust/data/base.py	Sat Jun 20 23:25:38 2015 -0700
+++ b/piecrust/data/base.py	Sat Jun 20 23:27:04 2015 -0700
@@ -101,7 +101,7 @@
                             "loaded")
         self._values[name] = value
 
-    def mapLoader(self, attr_name, loader):
+    def mapLoader(self, attr_name, loader, override_existing=False):
         if loader is None:
             if self._loaders is None or attr_name not in self._loaders:
                 return
@@ -112,11 +112,15 @@
 
         if self._loaders is None:
             self._loaders = {}
-        if attr_name in self._loaders:
+        if not override_existing and attr_name in self._loaders:
             raise Exception(
                     "A loader has already been mapped for: %s" % attr_name)
         self._loaders[attr_name] = loader
 
+    def mapValue(self, attr_name, value, override_existing=False):
+        loader = lambda _, __: value
+        self.mapLoader(attr_name, loader, override_existing=override_existing)
+
     def _load(self):
         if self._values is not None:
             return