""" Dict that has a callback on all updates """ class UpdateDict(dict): updated = None updated_args = None def _updated(self): """ Assign to new_dict.updated to track updates """ updated = self.updated if updated is not None: args = self.updated_args if args is None: args = (self,) updated(*args) def __setitem__(self, key, item): dict.__setitem__(self, key, item) self._updated() def __delitem__(self, key): dict.__delitem__(self, key) self._updated() def clear(self): dict.clear(self) self._updated() def update(self, *args, **kw): dict.update(self, *args, **kw) self._updated() def setdefault(self, key, failobj=None): dict.setdefault(self, key, failobj) self._updated() def pop(self): v = dict.pop(self) self._updated() return v def popitem(self): v = dict.popitem(self) self._updated() return v