# HG changeset patch # User Ludovic Chabant # Date 1409554098 25200 # Node ID d64e4703f5e6be26eafdef16d93fd9de158d177d # Parent 838a9dd0e23cb5ef153ac43f5863af2937d6c3fa Propertly create `OrderedDict`s when loading YAML. diff -r 838a9dd0e23c -r d64e4703f5e6 piecrust/configuration.py --- a/piecrust/configuration.py Sat Aug 30 18:30:50 2014 -0700 +++ b/piecrust/configuration.py Sun Aug 31 23:48:18 2014 -0700 @@ -127,6 +127,20 @@ class OrderedDictYAMLLoader(yaml.SafeLoader): """ A YAML loader that loads mappings into ordered dictionaries. """ + def __init__(self, *args, **kwargs): + super(OrderedDictYAMLLoader, self).__init__(*args, **kwargs) + + self.add_constructor(u'tag:yaml.org,2002:map', + type(self).construct_yaml_map) + self.add_constructor(u'tag:yaml.org,2002:omap', + type(self).construct_yaml_map) + + def construct_yaml_map(self, node): + data = collections.OrderedDict() + yield data + value = self.construct_mapping(node) + data.update(value) + def construct_mapping(self, node, deep=False): if not isinstance(node, yaml.MappingNode): raise ConstructorError(None, None,