comparison piecrust/configuration.py @ 853:f070a4fc033c

core: Continue PieCrust3 refactor, simplify pages. The asset pipeline is still the only function pipeline at this point. * No more `QualifiedPage`, and several other pieces of code deleted. * Data providers are simpler and more focused. For instance, the page iterator doesn't try to support other types of items. * Route parameters are proper known source metadata to remove the confusion between the two. * Make the baker and pipeline more correctly manage records and record histories. * Add support for record collapsing and deleting stale outputs in the asset pipeline.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 21 May 2017 00:06:59 -0700
parents 4850f8c21b6e
children 7e51d14097cb
comparison
equal deleted inserted replaced
852:4850f8c21b6e 853:f070a4fc033c
13 logger = logging.getLogger(__name__) 13 logger = logging.getLogger(__name__)
14 14
15 default_allowed_types = (dict, list, tuple, float, int, bool, str) 15 default_allowed_types = (dict, list, tuple, float, int, bool, str)
16 16
17 17
18 MERGE_NEW_VALUES = 0
19 MERGE_OVERWRITE_VALUES = 1
20 MERGE_PREPEND_LISTS = 2
21 MERGE_APPEND_LISTS = 4
22 MERGE_ALL = MERGE_OVERWRITE_VALUES | MERGE_PREPEND_LISTS
23
24
18 class ConfigurationError(Exception): 25 class ConfigurationError(Exception):
19 pass 26 pass
20 27
21 28
22 class Configuration(collections.abc.MutableMapping): 29 class Configuration(collections.abc.MutableMapping):
62 69
63 def getAll(self): 70 def getAll(self):
64 self._ensureLoaded() 71 self._ensureLoaded()
65 return self._values 72 return self._values
66 73
67 def merge(self, other): 74 def merge(self, other, mode=MERGE_ALL):
68 self._ensureLoaded() 75 self._ensureLoaded()
69 76
70 if isinstance(other, dict): 77 if isinstance(other, dict):
71 other_values = other 78 other_values = other
72 elif isinstance(other, Configuration): 79 elif isinstance(other, Configuration):
158 cur[b] = value 165 cur[b] = value
159 else: 166 else:
160 if b not in cur: 167 if b not in cur:
161 cur[b] = {} 168 cur[b] = {}
162 cur = cur[b] 169 cur = cur[b]
163
164
165 MERGE_NEW_VALUES = 0
166 MERGE_OVERWRITE_VALUES = 1
167 MERGE_PREPEND_LISTS = 2
168 MERGE_APPEND_LISTS = 4
169 MERGE_ALL = MERGE_OVERWRITE_VALUES | MERGE_PREPEND_LISTS
170 170
171 171
172 def merge_dicts(source, merging, *args, 172 def merge_dicts(source, merging, *args,
173 validator=None, mode=MERGE_ALL): 173 validator=None, mode=MERGE_ALL):
174 _recurse_merge_dicts(source, merging, None, validator, mode) 174 _recurse_merge_dicts(source, merging, None, validator, mode)