Source code for betty.serde.dump

"""
An API to produce serializable data dumps.
"""

from __future__ import annotations

from abc import ABC, abstractmethod
from collections.abc import MutableMapping, MutableSequence, Sequence, Mapping
from typing import TypeVar, overload, Literal, TypeAlias

from betty.typing import Void, Voidable

#: A serialized dump.
Dump: TypeAlias = (
    bool
    | int
    | float
    | str
    | None
    | MutableSequence["Dump"]
    | MutableMapping[str, "Dump"]
)
_DumpT = TypeVar("_DumpT", bound=Dump)

#: A dump which is a sequence whose values are serialized dumps.
DumpSequence: TypeAlias = MutableSequence[_DumpT]

#: A dump which is a mapping whose keys are strings and values are serialized dumps.
DumpMapping: TypeAlias = MutableMapping[str, _DumpT]


@overload
def minimize(
    dump: Sequence[Voidable[Dump]], voidable: Literal[False] = False
) -> DumpSequence[Dump]:
    pass


@overload
def minimize(
    dump: Sequence[Voidable[Dump]], voidable: bool
) -> Voidable[DumpSequence[Dump]]:
    pass


@overload
def minimize(
    dump: Mapping[str, Voidable[Dump]], voidable: Literal[False] = False
) -> DumpMapping[Dump]:
    pass


@overload
def minimize(
    dump: Mapping[str, Voidable[Dump]], voidable: bool
) -> Voidable[DumpMapping[Dump]]:
    pass


[docs] def minimize( dump: Sequence[Voidable[Dump]] | Mapping[str, Voidable[Dump]], voidable: bool = False, ) -> Voidable[DumpSequence[Dump] | DumpMapping[Dump]]: """ Minimize a configuration dump by removing any :py:class:'betty.typing.Void' values from sequences and mappings. """ if isinstance(dump, Sequence): dump = [value for value in dump if value is not Void] for key in reversed(range(len(dump))): if dump[key] is Void: del dump[key] if isinstance(dump, Mapping): dump = {key: value for key, value in dump.items() if value is not Void} if len(dump) or not voidable: return dump # type: ignore[return-value] return Void
[docs] class Dumpable(ABC): """ Instances can be produce serialized data dumps of ``self``. """
[docs] @abstractmethod def dump(self) -> Voidable[Dump]: """ Produce a serialized data dump of ``self``. """ pass