Source code for gxformat2.yaml

"""YAML loading utilities for gxformat2."""
from collections import OrderedDict

try:
    from galaxy.model.custom_types import MutationDict  # type: ignore
except ImportError:
    MutationDict = None
import yaml


[docs]def ordered_load_path(path: str, **kwds): """Safe and ordered load of YAML from specified path.""" with open(path) as f: return ordered_load(f, **kwds)
[docs]def ordered_load(stream, Loader=yaml.SafeLoader, **kwds): """Safe and ordered load of YAML from stream.""" class OrderedLoader(Loader): pass def construct_mapping(loader, node): loader.flatten_mapping(node) return OrderedDict(loader.construct_pairs(node)) OrderedLoader.add_constructor( yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, construct_mapping) return yaml.load(stream, OrderedLoader, **kwds)
[docs]def ordered_dump(data, stream=None, Dumper=yaml.SafeDumper, **kwds): """Safe and ordered dump of YAML to stream.""" class OrderedDumper(Dumper): pass def _dict_representer(dumper, data): return dumper.represent_mapping( yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, list(data.items())) OrderedDumper.add_representer(OrderedDict, _dict_representer) if MutationDict is not None: OrderedDumper.add_representer(MutationDict, _dict_representer) return yaml.dump(data, stream, OrderedDumper, **kwds)
[docs]def ordered_dump_to_path(as_dict: dict, path: str): """Safe and ordered dump of YAML to path.""" with open(path, "w") as f: ordered_dump(as_dict, f)
__all__ = ( 'ordered_dump', 'ordered_dump_to_path', 'ordered_load', 'ordered_load_path', )