Blame tools/yaml_utils.py
|
Owen W. Taylor |
e0d0086 |
import yaml
|
|
Owen W. Taylor |
e0d0086 |
# https://stackoverflow.com/questions/5121931/in-python-how-can-you-load-yaml-mappings-as-ordereddicts
|
|
Owen W. Taylor |
e0d0086 |
|
|
Owen W. Taylor |
e0d0086 |
from collections import OrderedDict
|
|
Owen W. Taylor |
e0d0086 |
|
|
Owen W. Taylor |
e0d0086 |
def ordered_load(stream, Loader=yaml.Loader, object_pairs_hook=OrderedDict):
|
|
Owen W. Taylor |
e0d0086 |
class OrderedLoader(Loader):
|
|
Owen W. Taylor |
e0d0086 |
pass
|
|
Owen W. Taylor |
e0d0086 |
def construct_mapping(loader, node):
|
|
Owen W. Taylor |
e0d0086 |
loader.flatten_mapping(node)
|
|
Owen W. Taylor |
e0d0086 |
return object_pairs_hook(loader.construct_pairs(node))
|
|
Owen W. Taylor |
e0d0086 |
OrderedLoader.add_constructor(
|
|
Owen W. Taylor |
e0d0086 |
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
|
|
Owen W. Taylor |
e0d0086 |
construct_mapping)
|
|
Owen W. Taylor |
e0d0086 |
return yaml.load(stream, OrderedLoader)
|
|
Owen W. Taylor |
e0d0086 |
|
|
Owen W. Taylor |
e0d0086 |
def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds):
|
|
Owen W. Taylor |
e0d0086 |
class OrderedDumper(Dumper):
|
|
Owen W. Taylor |
e0d0086 |
pass
|
|
Owen W. Taylor |
e0d0086 |
def _dict_representer(dumper, data):
|
|
Owen W. Taylor |
e0d0086 |
return dumper.represent_mapping(
|
|
Owen W. Taylor |
e0d0086 |
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
|
|
Owen W. Taylor |
e0d0086 |
data.items())
|
|
Owen W. Taylor |
e0d0086 |
OrderedDumper.add_representer(OrderedDict, _dict_representer)
|
|
Owen W. Taylor |
e0d0086 |
return yaml.dump(data, stream, OrderedDumper, **kwds)
|