class Transaction(object): """ Modeling-specific! API should settle into something agnostic. """ interface.implements(ITransaction) def __init__(self): self.reset() def reset(self): self.editingContext = EditingContext() self.tracked = [] def track(self, *objects): for anObject in objects: if anObject.editingContext() is None: self.editingContext.insertObject(anObject) self.tracked.append(anObject) if anObject.editingContext() is not self.editingContext: raise ValueError, 'object already is being tracked' if anObject.transaction() is None: anObject.transaction = weakref.ref(self) def forget(self, anObject): if anObject.editingContext(): self.editingContext.forgetObject(anObject) def search(self, aClass, qual=nullQualifier): try: name = aClass.__name__ except AttributeError: # pray it's a string name = aClass logger.debug (name+": "+qual.value) result = self.editingContext.fetch(name, qual.value) for i in result: self.track(i) print 'ok', result return result def discard(self): for i in self.tracked: self.forget(i) self.reset() def save(self): self.editingContext.saveChanges()
class Transaction(object): """ Modeling-specific! API should settle into something agnostic. """ interface.implements(ITransaction) def __init__(self): self.reset() def reset(self): self.editingContext = EditingContext() self.tracked = [] def track(self, *objects): for anObject in objects: if anObject.editingContext() is None: self.editingContext.insertObject(anObject) self.tracked.append(anObject) if anObject.editingContext() is not self.editingContext: raise ValueError, 'object already is being tracked' if anObject.transaction() is None: anObject.transaction = weakref.ref(self) def forget(self, anObject): if anObject.editingContext(): self.editingContext.forgetObject(anObject) def search(self, aClass, qual=nullQualifier): try: name = aClass.__name__ except AttributeError: # pray it's a string name = aClass logger.debug(name + ": " + qual.value) result = self.editingContext.fetch(name, qual.value) for i in result: self.track(i) print 'ok', result return result def discard(self): for i in self.tracked: self.forget(i) self.reset() def save(self): self.editingContext.saveChanges()