Source code for segram.utils.settings

"""Utilities for managing package options."""
from typing import Any, Self
from ..datastruct import Namespace


[docs] class Settings(Namespace): """Settings manager for handling multiple option sets. It support ``with`` statement, which allow setting temporary values to any option group. If ``default`` attribute is defined, it is used as a defult key when using :meth:`get()` without arguments. """ def __init__(self, **kwds: Any) -> None: if (default := kwds.pop("default", None)) is not None: self.default = default super().__init__(**kwds) def __enter__(self) -> Self: for group in self.__dict__.values(): group.maps.appendleft({}) def __exit__(self, exc_type: type, exc_value: Any, exc_tb: Any) -> None: for group in self.__dict__.values(): group.maps.popleft()
[docs] def get(self, key: str | None = None, default: Any = None, /) -> Any: """Get option value or a default. Instance attribute ``self.__default__`` is used instead of ``key`` when ``key=None``. """ # pylint: disable=arguments-differ if key is None: key = getattr(self, "default", None) return super().get(key, default)