Mercurial > piecrust2
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: