Source code for yamlloader.ordereddict.dumpers

"""Dumpers for `:py:class:~collections.OrderedDict`."""

from __future__ import annotations

from collections import OrderedDict

import yaml

from .. import settings

__all__ = []


def represent_ordereddict(self, data):
    """

    Parameters
    ----------
    data : dict, OrderedDict

    Returns
    -------
    mapping
    """
    return self.represent_mapping("tag:yaml.org,2002:map", data.items())


class OrderedDumperMixin:
    def __init__(self, *args, **kwargs):
        sub_doc = self.__doc__
        if sub_doc is None:
            sub_doc = ""
        self.__doc__ = """Dump :py:class:~`collections.OrderedDict` and :py:class:`dict` (py37+)
        to YAML preserving the order."""
        self.__doc__ += sub_doc
        super().__init__(*args, **kwargs)
        self.add_representer(OrderedDict, type(self).represent_ordereddict)

    represent_ordereddict = staticmethod(represent_ordereddict)


doc_extension_Cversion = """

    The C version is preferable over the non-C version as they
    do equivalent things while the C version is faster.
    """


[docs] class Dumper(OrderedDumperMixin, yaml.Dumper): pass
[docs] class SafeDumper(OrderedDumperMixin, yaml.SafeDumper): __doc__ = """ """
if not hasattr(yaml, "CDumper"): if settings.ALLOW_NON_C_FALLBACK: CDumper = Dumper else:
[docs] class CDumper(OrderedDumperMixin, yaml.CDumper): __doc__ = doc_extension_Cversion
if not hasattr(yaml, "CSafeDumper"): if settings.ALLOW_NON_C_FALLBACK: CSafeDumper = SafeDumper else:
[docs] class CSafeDumper(OrderedDumperMixin, yaml.CSafeDumper): __doc__ = doc_extension_Cversion