o
    ޭh5                     @  s   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ er2d dlmZmZ edZed	ef Zed
edZdddZddddZddddZdS )    )annotations)Callable)wraps)TYPE_CHECKINGTypeVarcast)connections)ParamsError)BaseDBAsyncClientTransactionContextT.F)boundconnection_name
str | Nonereturnr
   c                 C  sT   | r	t | }|S tt jdkr ttt j } t | }|S tdtt j )N   zPYou are running with multiple databases, so you should specify connection_name: )	r   getlen	db_confignextiterkeysr	   listr   
connection r   Z/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/tortoise/transactions.py_get_connection   s   
	
r   Nr   c                 C  s   t | }| S )aG  
    Transaction context manager.

    You can run your code inside ``async with in_transaction():`` statement to run it
    into one transaction. If error occurs transaction will rollback.

    :param connection_name: name of connection to run with, optional if you have only
                            one db connection
    )r   _in_transactionr   r   r   r   in_transaction    s   
r    Callable[[F], F]c                   s   d fdd}|S )a(  
    Transaction decorator.

    You can wrap your function with this decorator to run it into one transaction.
    If error occurs transaction will rollback.

    :param connection_name: name of connection to run with, optional if you have only
                            one db connection
    funcr   r   c                   s"   t  d fdd}tt|S )Nr   r   c               	     sV   t  4 I d H  | i |I d H W  d   I d H  S 1 I d H s$w   Y  d S N)r    )argskwargs)r   r"   r   r   wrapped:   s   0z(atomic.<locals>.wrapper.<locals>.wrapped)r   r   )r   r   r   )r"   r&   r   )r"   r   wrapper9   s   
zatomic.<locals>.wrapperN)r"   r   r   r   r   )r   r(   r   r'   r   atomic.   s   r)   )r   r   r   r
   r#   )r   r   r   r   )r   r   r   r!   )
__future__r   collections.abcr   	functoolsr   typingr   r   r   tortoiser   tortoise.exceptionsr	   tortoise.backends.base.clientr
   r   r   FuncTyper   r   r    r)   r   r   r   r   <module>   s    
