Source code for pyglotaran_extras.config.utils
"""Module containing config utilities."""
from __future__ import annotations
from io import StringIO
from typing import TYPE_CHECKING
from ruamel.yaml import YAML
if TYPE_CHECKING:
from pyglotaran_extras.types import SupportsModelDump
[docs]
def to_yaml_str(self: SupportsModelDump) -> str:
"""Create yaml string from dumped model.
Parameters
----------
self : SupportsModelDump
Instance of a class that supports ``model_dump``.
Returns
-------
str
See Also
--------
add_yaml_repr
"""
yaml = YAML()
yaml.indent(mapping=2, sequence=4, offset=2)
buffer = StringIO()
yaml.dump(self.model_dump(), buffer)
buffer.seek(0)
return buffer.read()
[docs]
def add_yaml_repr(cls: type[SupportsModelDump]) -> type[SupportsModelDump]:
"""Add yaml ``__str__`` and ``_repr_markdown_`` methods to class that supports ``model_dump``.
Parameters
----------
cls : type[SupportsModelDump]
Class to add the methods to.
Returns
-------
type[SupportsModelDump]
"""
cls.__str__ = to_yaml_str # type:ignore[method-assign]
cls._repr_markdown_ = lambda self: f"```yaml\n{self}\n```" # type:ignore[attr-defined]
return cls