
    ۇeh1!                         d dl Z ddlmZ ddlmZ  G d de j                  Zh dZdd	d
ddZ G d dej	                  Z
dS )    N   )connresource)
exceptionsc                   "    e Zd ZdZdZdZdZdZdS )TransactionStater   r            N)__name__
__module____qualname__NEWSTARTED	COMMITTED
ROLLEDBACKFAILED     E/var/www/api/venv/lib/python3.11/site-packages/asyncpg/transaction.pyr   r      s'        
CGIJFFFr   r   >   serializableread_committedrepeatable_readread_uncommittedr   r   r   r   )zread committedzread uncommittedr   zrepeatable readc                        e Zd ZdZdZ fdZd Zd Zej	        d             Z
d Zd Zd	 Zd
 Zej	        d             Zej	        d             Zd Z xZS )TransactionzRepresents a transaction or savepoint block.

    Transactions are created by calling the
    :meth:`Connection.transaction() <connection.Connection.transaction>`
    function.
    )_connection
_isolation	_readonly_deferrable_state_nested_id_managedc                 &   t                                          |           |r1|t          vr(t          d                    t          |                    || _        || _        || _        t          j	        | _
        d| _        d | _        d| _        d S )Nz2isolation is expected to be either of {}, got {!r}F)super__init__ISOLATION_LEVELS
ValueErrorformatr   r   r   r   r   r    r!   r"   r#   )self
connection	isolationreadonly
deferrable	__class__s        r   r&   zTransaction.__init__/   s    $$$ 	@*:::!6"2I>>@ @ @ $!%&*r   c                    K   | j         rt          j        d          d| _         |                                  d {V  d S )Nz6cannot enter context: already in an `async with` blockT)r#   
apg_errorsInterfaceErrorstartr*   s    r   
__aenter__zTransaction.__aenter__?   sY      = 	J+HJ J Jjjllr   c                   K   	 |                      d           n # t          j        $ r |t          u rY d S  w xY w	 ||                                  d {V  n|                                  d {V  d| _        d S # d| _        w xY w)N	__aexit__F)_check_conn_validityr1   r2   GeneratorExit_Transaction__rollback_Transaction__commitr#   )r*   extypeextbs       r   r7   zTransaction.__aexit__F   s      	%%k2222( 	 	 	&& 		"!oo''''''''''mmoo%%%%%%%!DMMMEDM!!!!s    777A; ;	Bc                   K   |                      d           | j        t          j        u rt	          j        d          | j        }|j        5|j        	                                rt	          j        d          | |_        n| j
        rq|j        j
        }|+t          | j                            d           d{V          }| j
        |k    r-t	          j        d                    | j
        |                    d| _        | j        r5|                    d          | _        d	                    | j                  }nbd
}| j
        dk    r|dz  }n2| j
        dk    r|dz  }n!| j
        dk    r|dz  }n| j
        dk    r|dz  }| j        r|dz  }| j        r|dz  }|dz  }	 | j                            |           d{V  t          j        | _        dS # t(          $ r t          j        | _         w xY w)z)Enter the transaction or savepoint block.r3   z0cannot start; the transaction is already startedNzEcannot use Connection.transaction() in a manually started transactionzSHOW transaction_isolation;zNnested transaction has a different isolation level: current {!r} != outer {!r}T	savepointzSAVEPOINT {};BEGINr   z ISOLATION LEVEL READ COMMITTEDr   z! ISOLATION LEVEL READ UNCOMMITTEDr   z  ISOLATION LEVEL REPEATABLE READr   z ISOLATION LEVEL SERIALIZABLEz
 READ ONLYz DEFERRABLE;)_Transaction__check_state_baser    r   r   r1   r2   r   	_top_xact	_protocolis_in_transactionr   ISOLATION_LEVELS_BY_VALUEfetchvalr)   r!   _get_unique_idr"   r   r   executeBaseExceptionr   )r*   contop_xact_isolationquerys       r   r3   zTransaction.start_   s      	(((;*222+BD D D = }..00 6 /56 6 6 !CMM  
B%(]%="%-)B".779; ; ; ; ; ; ; ;*<& ?&888$355;V O-?6A 6AB B B  DL< 	))+66DH#**4844EEE"222::$666<<$555;;N2288~ &% '&SLE	3"**5111111111
 +2DKKK	  	 	 	*1DK	s     G G0c                 b   | j         t          j        u r't          j        d                    |                    | j         t          j        u r't          j        d                    |                    | j         t          j        u r't          j        d                    |                    d S )Nz/cannot {}; the transaction is already committedz1cannot {}; the transaction is already rolled backz,cannot {}; the transaction is in error state)r    r   r   r1   r2   r)   r   r   r*   opnames     r   __check_state_basezTransaction.__check_state_base   s    ;*444+AHH    ;*555+CJJ    ;*111+>EE    21r   c                     | j         t          j        urQ| j         t          j        u r't	          j        d                    |                    |                     |           d S d S )Nz-cannot {}; the transaction is not yet started)r    r   r   r   r1   r2   r)   rC   rP   s     r   __check_statezTransaction.__check_state   ss    ;.666{.222 /CJJ   ! ! ! ##F+++++ 76r   c                 T  K   |                      d           | j        j        | u rd | j        _        | j        rd                    | j                  }nd}	 | j                            |           d {V  t          j        | _	        d S # t          $ r t          j        | _	         w xY w)NcommitzRELEASE SAVEPOINT {};zCOMMIT;)_Transaction__check_stater   rD   r!   r)   r"   rJ   r   r   r    rK   r   r*   rN   s     r   __commitzTransaction.__commit   s      8$$$%--)-D&< 	+2248<<EEE	5"**5111111111
 +4DKKK	  	 	 	*1DK	    B
 
B'c                 T  K   |                      d           | j        j        | u rd | j        _        | j        rd                    | j                  }nd}	 | j                            |           d {V  t          j        | _	        d S # t          $ r t          j        | _	         w xY w)NrollbackzROLLBACK TO {};z	ROLLBACK;)rW   r   rD   r!   r)   r"   rJ   r   r   r    rK   r   rX   s     r   
__rollbackzTransaction.__rollback   s      :&&&%--)-D&< 	 %,,TX66EEE	6"**5111111111
 +5DKKK	  	 	 	*1DK	rZ   c                 t   K   | j         rt          j        d          |                                  d{V  dS )z;Exit the transaction or savepoint block and commit changes.z8cannot manually commit from within an `async with` blockN)r#   r1   r2   r;   r4   s    r   rV   zTransaction.commit   sT       = 	L+JL L Lmmoor   c                 t   K   | j         rt          j        d          |                                  d{V  dS )z=Exit the transaction or savepoint block and rollback changes.z:cannot manually rollback from within an `async with` blockN)r#   r1   r2   r:   r4   s    r   r\   zTransaction.rollback   sV       = 	N+LN N Noor   c                     g }|                     d                    | j        j                                                             | j        |                     | j                   | j        r|                     d           | j        r|                     d           | j        j	        
                    d          rd}n| j        j	        }d                    || j        j        d                    |          t          |                     S )Nzstate:{}r-   r.   zasyncpg.asyncpgz<{}.{} {} {:#x}> )appendr)   r    namelowerr   r   r   r/   r   
startswithr   joinid)r*   attrsmods      r   __repr__zTransaction.__repr__   s    Z&&t{'7'='='?'?@@AAA?&LL)))> 	%LL$$$ 	'LL&&&>$//
;; 	,CC.+C!(((#((5//2d88E E 	Er   )r   r   r   __doc__	__slots__r&   r5   r7   r   guardedr3   rC   rW   r;   r:   rV   r\   rk   __classcell__)r/   s   @r   r   r   $   s        9I       " " "2 73 73 73r  , , ,5 5 5&6 6 6&         E E E E E E Er   r   )enum r   r   r1   Enumr   r'   rG   ConnectionResourcer   r   r   r   <module>rt      s           & & & & & &    ty       '*"(	  RE RE RE RE RE,1 RE RE RE RE REr   