Mercurial > piecrust2
comparison piecrust/sources/base.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 | e7b865f8f335 |
children | daf8df5ade7d |
comparison
equal
deleted
inserted
replaced
439:c0700c6d9545 | 440:32c7c2d219d2 |
---|---|
112 raise NotImplementedError() | 112 raise NotImplementedError() |
113 | 113 |
114 def findPageFactory(self, metadata, mode): | 114 def findPageFactory(self, metadata, mode): |
115 raise NotImplementedError() | 115 raise NotImplementedError() |
116 | 116 |
117 def buildDataProvider(self, page, user_data): | 117 def buildDataProvider(self, page, override): |
118 if self._provider_type is None: | 118 if self._provider_type is None: |
119 cls = next((pt for pt in self.app.plugin_loader.getDataProviders() | 119 cls = next((pt for pt in self.app.plugin_loader.getDataProviders() |
120 if pt.PROVIDER_NAME == self.data_type), | 120 if pt.PROVIDER_NAME == self.data_type), |
121 None) | 121 None) |
122 if cls is None: | 122 if cls is None: |
123 raise ConfigurationError( | 123 raise ConfigurationError( |
124 "Unknown data provider type: %s" % self.data_type) | 124 "Unknown data provider type: %s" % self.data_type) |
125 self._provider_type = cls | 125 self._provider_type = cls |
126 | 126 |
127 return self._provider_type(self, page, user_data) | 127 return self._provider_type(self, page, override) |
128 | 128 |
129 def getTaxonomyPageRef(self, tax_name): | 129 def getTaxonomyPageRef(self, tax_name): |
130 tax_pages = self.config.get('taxonomy_pages') | 130 tax_pages = self.config.get('taxonomy_pages') |
131 if tax_pages is None: | 131 if tax_pages is None: |
132 return None | 132 return None |