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