mirror of
https://github.com/pre-commit/pre-commit.git
synced 2026-02-17 16:24:40 +04:00
Add ordered yaml load/dump
This commit is contained in:
parent
c695ee9a9a
commit
2699026908
2 changed files with 63 additions and 0 deletions
28
pre_commit/yaml_extensions.py
Normal file
28
pre_commit/yaml_extensions.py
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
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.Dumper): 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue