Source code for meteodatalab.config

"""global configuration for meteodatalab."""

# Standard library
from contextlib import contextmanager
from typing import Any, Literal

config: dict = {}


[docs] @contextmanager def set_values(config: dict = config, **kwargs): """Temporarily set configuration values within a context manager. Parameters ---------- config : dict, optional dictionary object use to hold the configuration. Default will use the config object in this module **kwargs : the configuration key-value pairs to set. """ record: list[tuple[Literal["insert", "replace"], str, Any]] = [] for key, value in kwargs.items(): if key in config: record.append(("replace", key, config[key])) else: record.append(("insert", key, None)) config[key] = value try: yield config finally: for op, key, value in reversed(record): d = config if op == "replace": d[key] = value else: # insert d.pop(key, None)
[docs] def get( key: str, default: Any = None, config: dict = config, ) -> Any: """Get values from global config. Parameters ---------- key: str specifies the name of the key for which the value is requested default: Any default value to be returned in case the key does not exist in config config: dict, optional config object holding the mapping. Default value is the global config """ return config.get(key, default)