changeset 427:3b658190c02b

performance: Compute default layout extensions only once.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 26 Jun 2015 09:51:06 -0700
parents ed5ccd4cce49
children f4b7c8f183a4
files piecrust/environment.py piecrust/rendering.py
diffstat 2 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/environment.py	Fri Jun 26 09:49:29 2015 -0700
+++ b/piecrust/environment.py	Fri Jun 26 09:51:06 2015 -0700
@@ -50,6 +50,7 @@
 
 class Environment(object):
     def __init__(self):
+        self.app = None
         self.start_time = None
         self.exec_info_stack = ExecutionInfoStack()
         self.was_cache_cleaned = False
@@ -59,13 +60,30 @@
         self.fs_caches = {
                 'renders': self.rendered_segments_repository}
         self.fs_cache_only_for_main_page = False
+        self._default_layout_extensions = None
         self._timers = {}
 
+    @property
+    def default_layout_extensions(self):
+        if self._default_layout_extensions is not None:
+            return self._default_layout_extensions
+
+        if self.app is None:
+            raise Exception("This environment has not been initialized yet.")
+
+        from piecrust.rendering import get_template_engine
+        dte = get_template_engine(self.app, None)
+        self._default_layout_extensions = ['.' + e.lstrip('.')
+                                           for e in dte.EXTENSIONS]
+        return self._default_layout_extensions
+
     def initialize(self, app):
+        self.app = app
         self.start_time = time.perf_counter()
         self.exec_info_stack.clear()
         self.was_cache_cleaned = False
         self.base_asset_url_format = '%uri%'
+
         self._onSubCacheDirChanged(app)
 
     def registerTimer(self, category, *, raise_if_registered=True):
--- a/piecrust/rendering.py	Fri Jun 26 09:49:29 2015 -0700
+++ b/piecrust/rendering.py	Fri Jun 26 09:51:06 2015 -0700
@@ -342,9 +342,7 @@
     assert cpi.page == page
 
     names = layout_name.split(',')
-    default_template_engine = get_template_engine(page.app, None)
-    default_exts = ['.' + e.lstrip('.')
-                    for e in default_template_engine.EXTENSIONS]
+    default_exts = page.app.env.default_layout_extensions
     full_names = []
     for name in names:
         if '.' not in name: