0001"""
0002Dict that has a callback on all updates
0003"""
0004
0005class UpdateDict(dict):
0006 updated = None
0007 updated_args = None
0008 def _updated(self):
0009 """
0010 Assign to new_dict.updated to track updates
0011 """
0012 updated = self.updated
0013 if updated is not None:
0014 args = self.updated_args
0015 if args is None:
0016 args = (self,)
0017 updated(*args)
0018 def __setitem__(self, key, item):
0019 dict.__setitem__(self, key, item)
0020 self._updated()
0021 def __delitem__(self, key):
0022 dict.__delitem__(self, key)
0023 self._updated()
0024 def clear(self):
0025 dict.clear(self)
0026 self._updated()
0027 def update(self, *args, **kw):
0028 dict.update(self, *args, **kw)
0029 self._updated()
0030 def setdefault(self, key, failobj=None):
0031 dict.setdefault(self, key, failobj)
0032 self._updated()
0033 def pop(self):
0034 v = dict.pop(self)
0035 self._updated()
0036 return v
0037 def popitem(self):
0038 v = dict.popitem(self)
0039 self._updated()
0040 return v