Source code for dantro.data_loaders.yaml

"""Supplies loading functions for YAML files"""

import logging

from .._yaml import load_yml
from ..containers import MutableMappingContainer, ObjectContainer
from ._registry import add_loader

log = logging.getLogger(__name__)

# -----------------------------------------------------------------------------


[docs]class YamlLoaderMixin: """Supplies functionality to load YAML files in the :py:class:`~dantro.data_mngr.DataManager`. Uses the :py:func:`yayaml.io.load_yml` function for loading the files. """ @add_loader(TargetCls=MutableMappingContainer, register_aliases=["yml"]) def _load_yaml( filepath: str, *, TargetCls: type, **load_kwargs ) -> MutableMappingContainer: """Load a YAML file from the given path and create a container to store that data in. Uses the :py:func:`yayaml.io.load_yml` function for loading. Args: filepath (str): Where to load the YAML file from TargetCls (type): The class constructor **load_kwargs: Passed on to :py:func:`yayaml.io.load_yml` Returns MutableMappingContainer: The loaded YAML content as a container """ d = load_yml(filepath, **load_kwargs) return TargetCls(data=d, attrs=dict(filepath=filepath)) @add_loader(TargetCls=ObjectContainer, register_aliases=["yml_to_object"]) def _load_yaml_to_object( filepath: str, *, TargetCls: type, **load_kwargs ) -> ObjectContainer: """Load a YAML file from the given path and create a container to store that data in. Uses the :py:func:`yayaml.io.load_yml` function for loading. Args: filepath (str): Where to load the YAML file from TargetCls (type): The class constructor **load_kwargs: Passed on to :py:func:`yayaml.io.load_yml` Returns: ObjectContainer: The loaded YAML content as an ObjectContainer """ # NOTE Implementation is the same as above, but the TargetCls is not! d = load_yml(filepath, **load_kwargs) return TargetCls(data=d, attrs=dict(filepath=filepath))