o
    =Di                     @   sR   d Z ddlmZ ddlmZ ddlmZ ddlmZ ededee fdd	Z	d
S )zAtomic transaction context manager utilities for MySQL Connector/Python.

Provides context manager atomic_transaction() that ensures commit on success
and rollback on error without obscuring the original exception.
    )contextmanager)Iterator)MySQLConnectionAbstract)MySQLCursorAbstractconnreturnc                 c   s    | j }|  }d}zAz|rd| _ |V  |   W n ty2   d}z|   W   ty1   Y  w w W || _ z|  W dS  tyK   |sH Y dS w || _ z|  W w  tya   |s_ Y w w )a  
    Context manager that wraps a MySQL database cursor and ensures transaction
    rollback in case of exception.

    NOTE: DDL statements such as CREATE TABLE cause implicit commits. These cannot
    be managed by a cursor object. Changes made at or before a DDL statement will
    be committed and not rolled back. Callers are responsible for any cleanup of
    this type.

    This class acts as a robust, PEP 343-compliant context manager for handling
    database cursor operations on a MySQL connection. It ensures that all operations
    executed within the context block are part of the same transaction, and
    automatically calls `connection.rollback()` if an exception occurs, helping
    to maintain database integrity. On normal completion (no exception), it simply
    closes the cursor after use. Exceptions are always propagated to the caller.

    Args:
        conn: A MySQLConnectionAbstract instance.
    FTN)
autocommitcursorcommit	Exceptionrollbackclose)r   old_autocommitr	   exception_raised r   U/var/www/Datamplify/venv/lib/python3.10/site-packages/mysql/ai/utils/atomic_cursor.pyatomic_transaction*   sH   
r   N)
__doc__
contextlibr   typingr   mysql.connector.abstractsr   mysql.connector.cursorr   r   r   r   r   r   <module>   s   