# HG changeset patch # User Ludovic Chabant # Date 1435337466 25200 # Node ID 3b658190c02ba3807446ca67f976f3616ddb381e # Parent ed5ccd4cce492bbad99d6496e3642841dce5485f performance: Compute default layout extensions only once. diff -r ed5ccd4cce49 -r 3b658190c02b piecrust/environment.py --- 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): diff -r ed5ccd4cce49 -r 3b658190c02b piecrust/rendering.py --- 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: