Mercurial > piecrust2
diff piecrust/rendering.py @ 991:1857dbd4580f
bake: Fix bugs introduced by bake optimizations, of course.
- Make the execution stats JSON-serializable.
- Re-add ability to differentiate between sources used during segment rendering
and during layout rendering. Fixes problems with cache invalidation of
pages that use other sources.
- Make taxonomy-related stuff JSON-serializable.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Mon, 20 Nov 2017 23:06:47 -0800 |
parents | 8adc27285d93 |
children | e94737572542 |
line wrap: on
line diff
--- a/piecrust/rendering.py Sun Nov 19 14:29:52 2017 -0800 +++ b/piecrust/rendering.py Mon Nov 20 23:06:47 2017 -0800 @@ -52,7 +52,7 @@ saved to records. """ return { - 'used_source_names': set(), + 'used_source_names': {'segments': [], 'layout': []}, 'used_pagination': False, 'pagination_has_more': False, 'used_assets': False, @@ -68,11 +68,27 @@ self.pagination_filter = None self.render_info = create_render_info() self.custom_data = {} + self._current_used_source_names = None @property def app(self): return self.page.app + @property + def current_used_source_names(self): + usn = self._current_used_source_names + if usn is not None: + return usn + else: + raise Exception("No render pass specified.") + + def setRenderPass(self, name): + if name is not None: + self._current_used_source_names = \ + self.render_info['used_source_names'][name] + else: + self._current_used_source_names = None + def setPagination(self, paginator): ri = self.render_info if ri.get('used_pagination'): @@ -83,8 +99,9 @@ self.addUsedSource(paginator._source) def addUsedSource(self, source): - ri = self.render_info - ri['used_source_names'].add(source.name) + usn = self.current_used_source_names + if source.name not in usn: + usn.append(source.name) class RenderingContextStack(object): @@ -253,6 +270,8 @@ page = ctx.page app = page.app + ctx.setRenderPass('segments') + engine_name = page.config.get('template_engine') format_name = page.config.get('format') @@ -296,6 +315,8 @@ assert cur_ctx is not None assert cur_ctx.page == page + cur_ctx.setRenderPass('layout') + names = layout_name.split(',') full_names = [] for name in names: