mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-01-12 20:10:21 -06:00
29 lines
834 B
Python
29 lines
834 B
Python
|
|
import yaml
|
|
|
|
from pre_commit.ordereddict import OrderedDict
|
|
|
|
|
|
# Adapted from http://stackoverflow.com/a/21912744/812183
|
|
|
|
def ordered_load(s):
|
|
class OrderedLoader(yaml.loader.Loader): pass
|
|
def constructor(loader, node):
|
|
return OrderedDict(loader.construct_pairs(node))
|
|
OrderedLoader.add_constructor(
|
|
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
|
|
constructor,
|
|
)
|
|
return yaml.load(s, Loader=OrderedLoader)
|
|
|
|
|
|
def ordered_dump(s, **kwargs):
|
|
class OrderedDumper(yaml.dumper.SafeDumper): pass
|
|
def dict_representer(dumper, data):
|
|
return dumper.represent_mapping(
|
|
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG,
|
|
data.items(),
|
|
)
|
|
OrderedDumper.add_representer(OrderedDict, dict_representer)
|
|
return yaml.dump(s, Dumper=OrderedDumper, **kwargs)
|