Mercurial > piecrust2
comparison piecrust/data/piecrustdata.py @ 440:32c7c2d219d2
performance: Refactor how data is managed to reduce copying.
* Make use of `collections.abc.Mapping` to better identify things that are
supposed to look like dictionaries.
* Instead of handling "overlay" of data in a dict tree in each different data
object, make all objects `Mapping`s and handle merging at a higher level
with the new `MergedMapping` object.
* Since this new object is read-only, remove the need for deep-copying of
app and page configurations.
* Split data classes into separate modules.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 28 Jun 2015 08:22:39 -0700 |
parents | |
children | 93b656f0af54 |
comparison
equal
deleted
inserted
replaced
439:c0700c6d9545 | 440:32c7c2d219d2 |
---|---|
1 import logging | |
2 from piecrust import APP_VERSION | |
3 from piecrust.data.debug import build_debug_info | |
4 | |
5 | |
6 logger = logging.getLogger(__name__) | |
7 | |
8 | |
9 class PieCrustData(object): | |
10 debug_render = ['version', 'url', 'branding', 'debug_info'] | |
11 debug_render_invoke = ['version', 'url', 'branding', 'debug_info'] | |
12 debug_render_redirect = {'debug_info': '_debugRenderDebugInfo'} | |
13 | |
14 def __init__(self): | |
15 self.version = APP_VERSION | |
16 self.url = 'http://bolt80.com/piecrust/' | |
17 self.branding = 'Baked with <em><a href="%s">PieCrust</a> %s</em>.' % ( | |
18 'http://bolt80.com/piecrust/', APP_VERSION) | |
19 self._page = None | |
20 self._data = None | |
21 | |
22 @property | |
23 def debug_info(self): | |
24 if self._page is not None and self._data is not None: | |
25 try: | |
26 return build_debug_info(self._page, self._data) | |
27 except Exception as ex: | |
28 logger.exception(ex) | |
29 return ('An error occured while generating debug info. ' | |
30 'Please check the logs.') | |
31 return '' | |
32 | |
33 def _enableDebugInfo(self, page, data): | |
34 self._page = page | |
35 self._data = data | |
36 | |
37 def _debugRenderDebugInfo(self): | |
38 return "The very thing you're looking at!" |