class CommonItem(AbstractObjectComparator):
""" base class for items contained in CommonDict """
def __str__(self):
""" support a nice string representation with all attribute values"""
tmp = ",".join(sorted([ "%s=%s" % (item, getattr(self, item)) for item in dir(self)
if not item.startswith("_") and getattr(self, item) != None and
type(getattr(self, item)) is not MethodType ] ))
for i in range(len(tmp)):
if ord(tmp[i]) > 127:
tmp = tmp.replace(tmp[i], " ")
return tmp
def __repr__(self):
return self.__str__()
def __unicode__(self):
return self.__str__()
def __iter__(self):
try:
if hasattr(self, '_compare_attributes'):
attributes = getattr(self, '_compare_attributes')
else:
attributes = [ getattr(self, attr) for attr in dir(self)
if not attr.startswith('_') and
type(getattr(self, attr)) is not MethodType ]
except KeyboardInterrupt:
raise
self._attributes = attributes
self._max= len(attributes)
self._index = 0
return self
def __next__(self):
if self._index < self._max:
result = self._attributes[self._index]
self._index += 1
return result
else:
# self._index = 0
raise StopIteration
def get(self, key, value=''):
return self.__getitem__(key, value='')
def dict_to_obj(dictobj):
top = CommonItem()
seqs = tuple, list, set, frozenset
for key, value in dictobj.items():
if isinstance(value, dict):
setattr(top, key, dict_to_obj(value))
elif isinstance(value, seqs):
setattr(top, key,
type(value)(dict_to_obj(sj) if isinstance(sj, dict) else sj for sj in value))
else:
setattr(top, key, value)
return top