Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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()