Source code for segram.datastruct.namespace

from typing import Any
from collections.abc import MutableMapping
from collections.abc import Iterable
from ..utils.meta import get_cname


[docs] class Namespace(MutableMapping): """Namespace class. It behaves like a dictionary with both item and attribute getters, setters and deletters. """ def __init__(self, *args: Any, **kwds: Any) -> None: try: dct = dict(*args, **kwds) except TypeError as exc: raise TypeError(f"'{get_cname(self)}' {str(exc)}") from exc self.__dict__.update(dct) def __repr__(self) -> str: return f"{get_cname(self)}({self.__dict__})" def __iter__(self) -> Iterable[str]: yield from self.__dict__ def __len__(self) -> int: return len(self.__dict__) def __getitem__(self, name: str) -> Any : return self.__dict__[name] def __setitem__(self, name: str, value: Any) -> None: self.__dict__[name] = value def __delitem__(self, name: str) -> None: del self.__dict__[name] def __contains__(self, name: str) -> bool: return name in self.__dict__ @property def names(self) -> list[str]: return list(self)