Source code for runcommands.util.data
[docs]class Data:
"""A bucket for arbitrary data.
Data can be added and retrieved as attributes (dot notation) or
items (bracket notation).
When a ``dict`` is added, it will be converted to an instance of
:class:`Data`.
"""
def __init__(self, **data):
super().__setattr__("__data", {})
for name, value in data.items():
self[name] = value
def __getattr__(self, name):
data = super().__getattribute__("__data")
return data[name]
__getitem__ = __getattr__
def __setattr__(self, name, value):
data = super().__getattribute__("__data")
if isinstance(value, dict):
value = self.__class__(**value)
data[name] = value
__setitem__ = __setattr__