Source code for python_awair.attrdict

"""Dict with attribute-like access."""

from typing import Any, Dict, KeysView

from python_awair import const


[docs]class AttrDict(Dict[str, Any]): """Dict with attribute-like access. For example, given an AttrDict *foo*, we could access its values via *foo["bar"]* or *foo.bar*. This is the parent class for the Sensors and Indices classes, and as such it renames some properties to friendlier names on initialization (but not anytime after). """ def __init__(self, attrs: Dict[str, Any]) -> None: """Initialize, hiding known sensor aliases.""" new_attrs = dict(attrs) for key, value in attrs.items(): if key in const.SENSOR_TO_ALIAS: new_attrs[const.SENSOR_TO_ALIAS[key]] = value del new_attrs[key] super().__init__(new_attrs) def __getattr__(self, name: str) -> Any: """Return things in the dict via dot-notation.""" if name in self: return self[name] raise AttributeError() def __setattr__(self, name: str, value: Any) -> None: """Set values in the dict via dot-notation.""" self[name] = value def __delattr__(self, name: str) -> None: """Remove values from the dict via dot-notation.""" del self[name] def __dir__(self) -> KeysView[str]: """Return dict keys as dir attributes.""" return self.keys()