

@contextlib.contextmanager
def _transaction_scope(self, context):
    new_transaction = self._independent
    transaction_contexts_by_thread = _transaction_contexts_by_thread(context)
    current = restore = getattr(transaction_contexts_by_thread, 'current', None)
    use_factory = self._factory
    global_factory = None
    if self._replace_global_factory:
        use_factory = global_factory = self._replace_global_factory
    elif ((current is not None) and current.global_factory):
        global_factory = current.global_factory
        if self._root._is_global_manager:
            use_factory = global_factory
    if ((current is not None) and (new_transaction or (current.factory is not use_factory))):
        current = None
    if (current is None):
        current = transaction_contexts_by_thread.current = _TransactionContext(use_factory, global_factory=global_factory, **use_factory._transaction_ctx_cfg)
    try:
        if (self._mode is not None):
            with current._produce_block(mode=self._mode, connection=self._connection, savepoint=self._savepoint, allow_async=self._allow_async) as resource:
                (yield resource)
        else:
            (yield)
    finally:
        if (restore is None):
            del transaction_contexts_by_thread.current
        elif (current is not restore):
            transaction_contexts_by_thread.current = restore

dataset/ETHPy150Open openstack/oslo.db/oslo_db/sqlalchemy/enginefacade.py _TransactionContextManager._transaction_scope/original