from attrdict import AttrDict
[docs]class ExtensibleAttrDict(dict):
"""Implements AttrDict-like behavior for complex objects"""
def __getattr__(self, name):
if name in self:
return self[name]
else:
raise AttributeError("No such attribute: " + name)
def __setattr__(self, name, value):
self[name] = value
def __delattr__(self, name):
if name in self:
del self[name]
else:
raise AttributeError("No such attribute: " + name)
[docs] def as_dict(self, filters=[], private_prefix='__'):
d = dict(self)
# Filter privates
if private_prefix is not None:
for k in list(d.keys()):
if k.startswith(private_prefix):
try:
d.pop(k)
except KeyError:
pass
# Filter filters
for f in filters:
try:
d.pop(f)
except KeyError:
pass
return d