
    :"ri1!                         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
y)    N   )connresource)
exceptionsc                        e Zd ZdZdZdZdZdZy)TransactionStater   r            N)__name__
__module____qualname__NEWSTARTED	COMMITTED
ROLLEDBACKFAILED     [/var/www/fortnox.pascalinesoft.com/venv/lib/python3.12/site-packages/asyncpg/transaction.pyr   r      s    
CGIJFr   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         |   |       |r'|t        vrt        dj	                  t        |            || _        || _        || _        t        j                  | _
        d| _        d | _        d| _        y )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__/   sv    $*::!6"2I>@ @ $!%&**r   c                    K   | j                   rt        j                  d      d| _         | j                          d {    y 7 w)Nz6cannot enter context: already in an `async with` blockT)r#   
apg_errorsInterfaceErrorstartr*   s    r   
__aenter__zTransaction.__aenter__?   s;     ==++HJ Jjjls   <AAAc                 
  K   	 | j                  d       	 || j	                          d {    n| j                          d {    d| _        y # t        j                  $ r |t        u rY y  w xY w7 G7 0# d| _        w xY w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	"!oo'''mmo%%!DM) (( 	& 	  (%!DMs[   BA A7 A3A7 A5A7 	BA0,B.A00B3A7 5A7 7	B  Bc                   K   | j                  d       | j                  t        j                  u rt	        j
                  d      | j                  }|j                  7|j                  j                         rt	        j
                  d      | |_        n| j                  r|j                  j                  }|*t        | j                  j                  d       d{      }| j                  |k7  r/t	        j
                  dj                  | j                  |            d| _        | j                  r2|j                  d      | _        d	j                  | j                         }n|d
}| j                  dk(  r|dz  }n>| 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                  j'                  |       d{    t        j                  | _        y7 @7 # t(        $ r t        j*                  | _         w xY w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 == }}..0 //56 6 !CM %(]]%=%="%-)B"..779; ;*<& ??&88$3355;V OO-?6AB B  DL<<))+6DH#**4884EE"22::$66<<$55;;N288~~%&SLE	3""**5111
 +22DKE;: 2 	*11DK	s=   CIHDI"H   HH  IH    I  Ic                    | j                   t        j                  u r$t        j                  dj                  |            | j                   t        j                  u r$t        j                  dj                  |            | j                   t        j                  u r$t        j                  dj                  |            y )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  2r   c                     | j                   t        j                  urR| j                   t        j                  u r$t	        j
                  dj                  |            | j                  |       y y )Nz-cannot {}; the transaction is not yet started)r    r   r   r   r1   r2   r)   rC   rP   s     r   __check_statezTransaction.__check_state   sa    ;;.666{{.222 //CJJ ! ! ##F+ 7r   c                   K   | j                  d       | j                  j                  | u rd | j                  _        | j                  rdj	                  | j
                        }nd}	 | j                  j                  |       d {    t        j                  | _	        y 7 # t        $ r t        j                  | _	         w xY w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2488<EE	5""**5111
 +44DK 2 	*11DK	0   A%C(B# B!B# C!B# # CCc                   K   | j                  d       | j                  j                  | u rd | j                  _        | j                  rdj	                  | j
                        }nd}	 | j                  j                  |       d {    t        j                  | _	        y 7 # t        $ r t        j                  | _	         w xY w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&<<%,,TXX6EE	6""**5111
 +55DK 2 	*11DK	rZ   c                    K   | j                   rt        j                  d      | j                          d{    y7 w)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   s6      ==++JL Lmmo   5?=?c                    K   | j                   rt        j                  d      | j                          d{    y7 w)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   s7      ==++LN Noor_   c                 H   g }|j                  dj                  | j                  j                  j	                                      | j
                  |j                  | j
                         | j                  r|j                  d       | j                  r|j                  d       | j                  j                  j                  d      rd}n| j                  j                  }dj                  || j                  j                  dj                  |      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'7'='='?@A??&LL)>>LL$LL&>>$$//
;C..++C!((((#((5/2d8E 	Er   )r   r   r   __doc__	__slots__r&   r5   r7   r   guardedr3   rC   rW   r;   r:   rV   r\   rl   __classcell__)r/   s   @r   r   r   $   s    9I "2 73 73r,5&6&      Er   r   )enum r   r   r1   Enumr   r'   rG   ConnectionResourcer   r   r   r   <module>ru      sT      &tyy   '*"(	 RE,11 REr   