def get_changes(self, cycle): """ For every key that has changed since begin() was called, returns a dictionary mapping the key to its value when begin was called, or deleted if it did not exist when begin was called. As a side-effect, updates self.ever_been_changed, and returns the changes to ever_been_changed as well. `cycle` If true, this cycles the old changes to the new changes. If False, does not. """ new = DictItems(self) rv = find_changes(self.old, new, deleted) if cycle: self.old = new if rv is None: return None delta_ebc = set() if cycle: for k in rv: if k not in self.ever_been_changed: self.ever_been_changed.add(k) delta_ebc.add(k) return rv, delta_ebc
def reset(self): """ Called to reset this to its initial conditions. """ self.ever_been_changed = set() self.clear() self.old = DictItems(self)
def __init__(self): # The value of this dictionary at the start of the current # rollback period (when begin() was last called). self.old = DictItems(self) # The set of variables in this StoreDict that changed since the # end of the init phase. self.ever_been_changed = set()
def restore_one(self, name): sd = store_dicts[name] sd.clear() sd.update(self.store[name]) sd.old = DictItems(self.old[name]) sd.ever_been_changed.clear() sd.ever_been_changed.update(self.ever_been_changed[name])
def get_changes(self): """ For every key that has changed since begin() was called, returns a dictionary mapping the key to its value when begin was called, or deleted if it did not exist when begin was called. As a side-effect, updates self.ever_been_changed. """ new = DictItems(self) rv = find_changes(self.old, new, deleted) self.old = new if rv is None: return EMPTY_DICT for k in rv: self.ever_been_changed.add(k) return rv
def begin(self): """ Called to mark the start of a rollback period. """ self.old = DictItems(self)