Viewing file: transaction.py (1.06 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from __future__ import absolute_import
from threading import local
class TransactionContext(object): def __init__(self, stack, context): self.stack = stack self.context = context
def __enter__(self): self.stack.push(self.context) return self
def __exit__(self, *exc_info): self.stack.pop(self.context)
class TransactionStack(local): def __init__(self): self.stack = []
def __len__(self): return len(self.stack)
def __iter__(self): return iter(self.stack)
def __call__(self, context): return TransactionContext(self, context)
def clear(self): self.stack = []
def peek(self): try: return self.stack[-1] except IndexError: return None
def push(self, context): self.stack.append(context) return context
def pop(self, context=None): if context is None: return self.stack.pop()
while self.stack: if self.stack.pop() is context: return context
|