rewrote over.types.ndict to use composition instead of inheritance due to obscue issues on raspbian

This commit is contained in:
Martin 2017-10-06 15:17:47 +02:00
parent 0d1794d4b6
commit 853e05a275

View file

@ -5,9 +5,9 @@ from collections import OrderedDict
# --------------------------------------------------
class ndict(OrderedDict):
class ndict:
"""
An OrderedDict subclass whose keys are exposed as attributes.
An OrderedDict wrapper whose keys are exposed as attributes.
>>> d = ndict()
>>> d.alpha = 1
@ -20,17 +20,38 @@ class ndict(OrderedDict):
{"alpha": 1, "beta": 42}
"""
__methods__ = ["values", "items"]
def __init__(self, *args, **kwargs):
object.__setattr__(self, "d", OrderedDict(*args, **kwargs))
def __repr__(self):
return "|" + repr(self.d)
def __iter__(self):
return self.d.__iter__()
def __getattr__(self, name):
"""
@while looking up an attribute
"""
if name in self:
return self[name]
elif name.replace("_", "-") in self:
return self[name.replace("_", "-")]
safe_name = name.replace("_", "-")
if name in self.__methods__:
return getattr(self.d, name)
if name in self.d:
return self.d[name]
elif safe_name in self.d:
return self.d[safe_name]
else:
raise AttributeError('"ndict" object has no attribute "%s"' %(name))
def __setattr__(self, name, value):
self[name] = value
self.d[name] = value
def __getitem__(self, key):
return self.d[key]
def __setitem__(self, key, value):
self.d[key] = value