smartdict.py revision 1519
1from convert import * 2 3class SmartDict(dict): 4 class Proxy(str): 5 def __int__(self): 6 return int(to_integer(str(self))) 7 def __long__(self): 8 return long(to_integer(str(self))) 9 def __float__(self): 10 return float(to_integer(str(self))) 11 def __nonzero__(self): 12 return to_bool(str(self)) 13 def convert(self, other): 14 t = type(other) 15 if t == bool: 16 return bool(self) 17 if t == int: 18 return int(self) 19 if t == long: 20 return long(self) 21 if t == float: 22 return float(self) 23 return str(self) 24 def __lt__(self, other): 25 return self.convert(other) < other 26 def __le__(self, other): 27 return self.convert(other) <= other 28 def __eq__(self, other): 29 return self.convert(other) == other 30 def __ne__(self, other): 31 return self.convert(other) != other 32 def __gt__(self, other): 33 return self.convert(other) > other 34 def __ge__(self, other): 35 return self.convert(other) >= other 36 37 def __add__(self, other): 38 return self.convert(other) + other 39 def __sub__(self, other): 40 return self.convert(other) - other 41 def __mul__(self, other): 42 return self.convert(other) * other 43 def __div__(self, other): 44 return self.convert(other) / other 45 def __truediv__(self, other): 46 return self.convert(other) / other 47 48 def __radd__(self, other): 49 return other + self.convert(other) 50 def __rsub__(self, other): 51 return other - self.convert(other) 52 def __rmul__(self, other): 53 return other * self.convert(other) 54 def __rdiv__(self, other): 55 return other / self.convert(other) 56 def __rtruediv__(self, other): 57 return other / self.convert(other) 58 59 60 def __getitem__(self, key): 61 return self.Proxy(dict.__getitem__(self, key)) 62 63 def __setitem__(self, key, item): 64 dict.__setitem__(self, key, str(item)) 65 66 def values(self): 67 return [ self.Proxy(v) for v in dict.values(self) ] 68 69 def itervalues(self): 70 for value in dict.itervalues(self): 71 yield self.Proxy(value) 72 73 def items(self): 74 return [ (k, self.Proxy(v)) for k,v in dict.items(self) ] 75 76 def iteritems(self): 77 for key,value in dict.iteritems(self): 78 yield key, self.Proxy(value) 79 80 def get(self, key, default=''): 81 return self.Proxy(dict.get(self, key, str(default))) 82 83 def setdefault(self, key, default=''): 84 return self.Proxy(dict.setdefault(self, key, str(default))) 85 86