Source code for yayaml.representers

"""This module implements custom YAML representer functions"""

from typing import Any, Callable, Union

from .yaml import (
    BaseRepresenter,
    Node,
    RepresenterFunc,
    add_representer,
    is_representer,
)

# -- Multi-purpose representers -----------------------------------------------


[docs]def represent_by_type( representer: BaseRepresenter, obj: Union[list, tuple, dict, Any], *, tag: str, ) -> Node: """A representer for simple types: sequence-like, mapping-like or scalar""" if isinstance(obj, (list, tuple)): return representer.represent_sequence(tag, list(obj)) elif isinstance(obj, dict): return representer.represent_mapping(tag, obj) return representer.represent_scalar(tag, str(obj))
# -- Representer factories ----------------------------------------------------
[docs]def build_representer( simplify_type: Callable[[Any], Union[list, tuple, dict, Any]] ) -> RepresenterFunc: """Builds a representer that""" def representer_func(representer: BaseRepresenter, obj: Any, *, tag: str): return represent_by_type( representer, simplify_type(obj), tag=tag, ) return representer_func
# -- Registration of representers --------------------------------------------- add_representer( slice, build_representer(lambda o: [o.start, o.stop, o.step]), ) add_representer( range, build_representer(lambda o: [o.start, o.stop, o.step]), )