Mercurial > piecrust2
changeset 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 | 6801ad5aa1d4 |
children | 4a43d7015b75 |
files | piecrust/data/base.py piecrust/data/builder.py |
diffstat | 2 files changed, 17 insertions(+), 9 deletions(-) [+] |
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
--- a/piecrust/data/builder.py Sat Jun 20 23:25:38 2015 -0700 +++ b/piecrust/data/builder.py Sat Jun 20 23:27:04 2015 -0700 @@ -6,6 +6,7 @@ from piecrust import APP_VERSION from piecrust.configuration import merge_dicts from piecrust.data.assetor import Assetor +from piecrust.data.base import LazyPageConfigData from piecrust.data.debug import build_debug_info from piecrust.data.linker import PageLinkerData from piecrust.data.paginator import Paginator @@ -37,6 +38,7 @@ first_uri, _ = split_sub_uri(app, ctx.uri) pc_data = PieCrustData() + config_data = LazyPageConfigData(page) pgn_source = ctx.pagination_source or get_default_pagination_source(page) paginator = Paginator(page, pgn_source, page_num=ctx.page_num, @@ -45,19 +47,21 @@ linker = PageLinkerData(page.source, page.rel_path) data = { 'piecrust': pc_data, - 'page': {}, + 'page': config_data, 'assets': assetor, 'pagination': paginator, 'family': linker } - page_data = data['page'] - page_data.update(copy.deepcopy(page.source_metadata)) - page_data.update(page.config.getDeepcopy(app.debug)) - page_data['url'] = ctx.uri - page_data['timestamp'] = time.mktime(page.datetime.timetuple()) + + for k, v in page.source_metadata.items(): + config_data.mapValue(k, copy.deepcopy(v)) + config_data.mapValue('url', ctx.uri, override_existing=True) + config_data.mapValue('timestamp', time.mktime(page.datetime.timetuple()), + override_existing=True) date_format = app.config.get('site/date_format') if date_format: - page_data['date'] = page.datetime.strftime(date_format) + config_data.mapValue('date', page.datetime.strftime(date_format), + override_existing=True) #TODO: handle slugified taxonomy terms.