Mercurial > piecrust2
diff piecrust/data/builder.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 | 9caaf78a17db |
children | 32c7c2d219d2 |
line wrap: on
line diff
--- 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.