| """A more or less complete user-defined wrapper around dictionary objects.""" |
| |
| class UserDict: |
| def __init__(self, dict=None): |
| self.data = {} |
| if dict is not None: self.update(dict) |
| def __repr__(self): return repr(self.data) |
| def __cmp__(self, dict): |
| if isinstance(dict, UserDict): |
| return cmp(self.data, dict.data) |
| else: |
| return cmp(self.data, dict) |
| def __len__(self): return len(self.data) |
| def __getitem__(self, key): return self.data[key] |
| def __setitem__(self, key, item): self.data[key] = item |
| def __delitem__(self, key): del self.data[key] |
| def clear(self): self.data.clear() |
| def copy(self): |
| if self.__class__ is UserDict: |
| return UserDict(self.data) |
| import copy |
| return copy.copy(self) |
| def keys(self): return self.data.keys() |
| def items(self): return self.data.items() |
| def iteritems(self): return self.data.iteritems() |
| def iterkeys(self): return self.data.iterkeys() |
| def itervalues(self): return self.data.itervalues() |
| def values(self): return self.data.values() |
| def has_key(self, key): return self.data.has_key(key) |
| def update(self, dict): |
| if isinstance(dict, UserDict): |
| self.data.update(dict.data) |
| elif isinstance(dict, type(self.data)): |
| self.data.update(dict) |
| else: |
| for k, v in dict.items(): |
| self[k] = v |
| def get(self, key, failobj=None): |
| if not self.has_key(key): |
| return failobj |
| return self[key] |
| def setdefault(self, key, failobj=None): |
| if not self.has_key(key): |
| self[key] = failobj |
| return self[key] |
| def popitem(self): |
| return self.data.popitem() |
| def __contains__(self, key): |
| return key in self.data |
| |
| class IterableUserDict(UserDict): |
| def __iter__(self): |
| return iter(self.data) |