Skip to content

Transaction

API Status

API documentation is auto-generated from docstrings. Ensure docstrings are comprehensive.

Overview

[Module purpose and key concepts]

Reference

transaction

This module provides the Transaction class.

Classes

Transaction

Source code in half_orm/transaction.py
class Transaction:
    """
    """

    __transactions = {}
    def __call__(self, model):
        self.__id = id(model)
        self.__transaction = None
        if self.__id not in self.__class__.__transactions:
            self.__class__.__transactions[self.__id] = {}
            self.__transaction = self.__class__.__transactions[self.__id]
            self.__transaction['level'] = 0
            self.__transaction['model'] = model
        else:
            self.__transaction = self.__transactions[self.__id]

    __init__ = __call__

    def __enter__(self):
        if self.__transaction['model']._connection.autocommit:
            self.__transaction['model']._connection.autocommit = False
        self.__transaction['level'] += 1

    def __exit__(self, *_):
        self.__transaction['level'] -= 1
        if self.__transaction['level'] == 0:
            try:
                self.__transaction['model']._connection.commit()
                self.__transaction['model']._connection.autocommit = True
            except Exception as exc:
                self.__transaction['model']._connection.rollback()

    @property
    def level(self):
        return self.__transaction.get('level')

    def is_set(self):
        return self.__transaction.get('level', 0) > 0