Mercurial > piecrust2
comparison piecrust/data/base.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 | 0e9a94b7fdfa |
children | 21e26ed867b6 |
comparison
equal
deleted
inserted
replaced
419:6801ad5aa1d4 | 420:f1b759c188b0 |
---|---|
99 if self._values is None: | 99 if self._values is None: |
100 raise Exception("Can't call _setValue before this data has been " | 100 raise Exception("Can't call _setValue before this data has been " |
101 "loaded") | 101 "loaded") |
102 self._values[name] = value | 102 self._values[name] = value |
103 | 103 |
104 def mapLoader(self, attr_name, loader): | 104 def mapLoader(self, attr_name, loader, override_existing=False): |
105 if loader is None: | 105 if loader is None: |
106 if self._loaders is None or attr_name not in self._loaders: | 106 if self._loaders is None or attr_name not in self._loaders: |
107 return | 107 return |
108 del self._loaders[attr_name] | 108 del self._loaders[attr_name] |
109 if len(self._loaders) == 0: | 109 if len(self._loaders) == 0: |
110 self._loaders = None | 110 self._loaders = None |
111 return | 111 return |
112 | 112 |
113 if self._loaders is None: | 113 if self._loaders is None: |
114 self._loaders = {} | 114 self._loaders = {} |
115 if attr_name in self._loaders: | 115 if not override_existing and attr_name in self._loaders: |
116 raise Exception( | 116 raise Exception( |
117 "A loader has already been mapped for: %s" % attr_name) | 117 "A loader has already been mapped for: %s" % attr_name) |
118 self._loaders[attr_name] = loader | 118 self._loaders[attr_name] = loader |
119 | |
120 def mapValue(self, attr_name, value, override_existing=False): | |
121 loader = lambda _, __: value | |
122 self.mapLoader(attr_name, loader, override_existing=override_existing) | |
119 | 123 |
120 def _load(self): | 124 def _load(self): |
121 if self._values is not None: | 125 if self._values is not None: |
122 return | 126 return |
123 self._values = self._page.config.getDeepcopy(self._page.app.debug) | 127 self._values = self._page.config.getDeepcopy(self._page.app.debug) |