
    *Jf$                        d Z ddlZddlmZ ddlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ e
rddlmZ ddlmZ ddlmZ ej        j        Zej        j        Z ej         e!          Z" G d de#          Z$ G d dej%                  Z& G d dee                   Z' G d de'd                   Z( G d de'd                   Z)dS )zC
Transaction context managers returned by Connection.transaction()
    N)TracebackType)GenericIteratorOptionalTypeUnionTYPE_CHECKING   )pq)sql)errors)ConnectionTypePQGen)Self)connection_summary)Any)
Connection)AsyncConnectionc                   >    e Zd ZdZdZ	 d	ded         fdZdefdZdS )
Rollbacka  
    Exit the current `Transaction` context immediately and rollback any changes
    made within this context.

    If a transaction context is specified in the constructor, rollback
    enclosing transactions contexts up to and including the one specified.
    psycopgNtransaction)TransactionAsyncTransactionNc                     || _         d S N)r   )selfr   s     V/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/psycopg/transaction.py__init__zRollback.__init__*   s     '    returnc                 0    | j         j         d| j        dS )N())	__class____qualname__r   r   s    r   __repr__zRollback.__repr__0   s!    .-EE0@EEEEr    r   )__name__
__module__r&   __doc__r   r   strr(    r    r   r   r      su          J GK' 'BC' ' ' 'F# F F F F F Fr    r   c                       e Zd ZdZdS )OutOfOrderTransactionNestingz)Out-of-order transaction nesting detectedN)r)   r*   r&   r+   r-   r    r   r/   r/   4   s        3333r    r/   c            	          e Zd Z	 	 ddedee         defdZedee         fd            Z	defd	Z
ded         fd
Zdeee                  dee         dee         dee         fdZded         fdZdee         dee         fdZdee         fdZdee         fdZdee         fdZddZdedee         fdZdS )BaseTransactionNF
connectionsavepoint_nameforce_rollbackc                     || _         | j         j        | _        |pd| _        || _        dx| _        | _        d| _        d| _        d S )N F)_connpgconn_savepoint_namer4   _entered_exited_outer_transaction_stack_index)r   r2   r3   r4   s       r   r   zBaseTransaction.__init__9   sP      
j'-3,',,"'r    r!   c                     | j         S )zV
        The name of the savepoint; `!None` if handling the main transaction.
        )r:   r'   s    r   r3   zBaseTransaction.savepoint_nameG   s     ##r    c                     | j         j         d| j         j         }t          | j                  }| j        sd}n| j        sd}nd}| j        r
| j        dnd}d| d| d| d	| d
t          |           ddS )N.inactiveactive
terminated r6   <r#   z) z at 0xx>)	r%   r*   r&   r   r9   r;   r<   r3   id)r   clsinfostatussps        r   r(   zBaseTransaction.__repr__P   s    *JJT^-HJJ!$+..} 	"FF 	"FF!F,0,?G#((((RA3AAAAfAAAABtHHAAAAAr    c              #      K   | j         rt          d          d| _         |                                  |                                 D ]"}| j                            |          E d {V  #d S )Nz(transaction blocks can be used only onceT)r;   	TypeError_push_savepoint_get_enter_commandsr8   _exec_command)r   commands     r   
_enter_genzBaseTransaction._enter_gen]   s      = 	HFGGG//11 	9 	9Gz//8888888888	9 	9r    exc_typeexc_valexc_tbc              #     K   |s#| j         s|                                 E d {V  dS 	 |                     |          E d {V S # t          $ r  t          $ r'}t
                              d| |           Y d }~dS d }~ww xY w)NFz#error ignored in rollback of %s: %s)r4   _commit_gen_rollback_genr/   	Exceptionloggerwarning)r   rU   rV   rW   exc2s        r   	_exit_genzBaseTransaction._exit_genf   s        	t2 	'')))))))))5#'#5#5g#>#>>>>>>>?/       DdDQQQuuuuus   A A?A::A?c              #      K   |                      d          }d| _        |r||                                 D ]"}| j                            |          E d {V  #d S )NcommitT)_pop_savepointr<   _get_commit_commandsr8   rR   )r   exrS   s      r   rY   zBaseTransaction._commit_gen   s}        ** 	H0022 	9 	9Gz//8888888888	9 	9r    c              #   x  K   t          |t                    r$t                              | j         dd           |                     d          }d| _        |r||                                 D ]"}| j                            |          E d {V  #t          |t                    r|j	        r	|j	        | u rdS dS )Nz: Explicit rollback from: T)exc_inforollbackF)

isinstancer   r\   debugr8   rb   r<   _get_rollback_commandsrR   r   )r   rV   rd   rS   s       r   rZ   zBaseTransaction._rollback_gen   s      gx(( 	SLLDJBBBTLRRR  ,, 	H2244 	9 	9Gz//8888888888gx(( 	& '*=*E*Etur    c              #     K   | j         r| j                                        V  | j        rZt	          j        d                              t	          j        | j                                                | j                  V  d S d S )NzSAVEPOINT {})	r=   r8   _get_tx_start_commandr:   r   SQLformat
Identifieras_bytesr'   s    r   rQ   z#BaseTransaction._get_enter_commands   s      " 	5*2244444 	''t';<<==$*%%    	 	r    c              #     K   | j         r_| j        sXt          j        d                              t          j        | j                                                 | j                  V  | j        r| j        j        rJ dV  d S d S )Nz
RELEASE {}s   COMMIT)	r:   r=   r   rm   rn   ro   rp   r8   _num_transactionsr'   s    r   rc   z$BaseTransaction._get_commit_commands   s       	(? 	%%t';<<==$*%%   " 	z3333OOOOO	 	r    c              #   D  K   | j         r| j        st          j        d                              t          j        | j                                                 | j                  V  t          j        d                              t          j        | j                                                 | j                  V  | j        r| j        j        rJ dV  | j        j	        
                                r&| j        j	                                        E d {V  d S d S )NzROLLBACK TO {n})nzRELEASE {n}s   ROLLBACK)r:   r=   r   rm   rn   ro   rp   r8   rr   	_preparedclearget_maintenance_commandsr'   s    r   rj   z&BaseTransaction._get_rollback_commands   s-      
	(? 
	)**#.)=>>??$*%%   &&#.)=>>??$*%%   " 	z3333 :%%'' 	Gz+DDFFFFFFFFFFF	G 	Gr    c                     | j         j        t          k    | _        | j        r| j        j        rJ n| j        sd| j        j        dz    | _        | j        j        | _        | j        xj        dz  c_        dS )z
        Push the transaction on the connection transactions stack.

        Also set the internal state of the object and verify consistency.
        _pg3_r
   N)r9   transaction_statusIDLEr=   r8   rr   r:   r>   r'   s    r   rP   zBaseTransaction._push_savepoint   s     #'+"@D"H" 	R z33333 ' R'Qtz/Ka/O'Q'Q$ J8
$$)$$$$r    actionc                     | j         xj        dz  c_        | j         j        | j        k    rdS t          d| d|            S )zy
        Pop the transaction from the connection transactions stack.

        Also verify the state consistency.
        r
   Nztransaction z at the wrong nesting level: )r8   rr   r>   r/   )r   r|   s     r   rb   zBaseTransaction._pop_savepoint   sW     	
$$)$$:'4+<<<4+F6FFFF
 
 	
r    NF)r!   N)r)   r*   r&   r   r   r,   boolr   propertyr3   r(   r   rT   r   BaseExceptionr   r_   rY   rZ   r   bytesrQ   rc   rj   rP   r[   rb   r-   r    r   r1   r1   8   s        )-$	 " ! 	    $ $ $ $ X$B# B B B B9E$K 9 9 9 94./ -( '	
 
t   29U4[ 9 9 9 9Xm%< t    $	Xe_ 	 	 	 	
huo 
 
 
 
G G G G G** * * *&
S 
Xi-@ 
 
 
 
 
 
r    r1   c                       e Zd ZdZdZedd            ZdefdZdee	e
                  dee
         d	ee         defd
ZdS )r   zO
    Returned by `Connection.transaction()` to handle a transaction block.
    r   r!   Connection[Any]c                     | j         S )z&The connection the object is managing.r8   r'   s    r   r2   zTransaction.connection   s     zr    c                     | j         j        5  | j                             |                                            d d d            n# 1 swxY w Y   | S r   r8   lockwaitrT   r'   s    r   	__enter__zTransaction.__enter__   s    Z_ 	/ 	/JOODOO--...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   -AA
A
rU   rV   rW   c                     | j         j        t          k    rU| j        j        5  | j                            |                     |||                    cd d d            S # 1 swxY w Y   d S dS r~   r9   rL   OKr8   r   r   r_   r   rU   rV   rW   s       r   __exit__zTransaction.__exit__   s     ;## R Rzt~~h'P'PQQR R R R R R R R R R R R R R R R R R 5s   /AA"%A"N)r!   r   )r)   r*   r&   r+   r   r2   r   r   r   r   r   r   r   r   r-   r    r   r   r      s          J   X4    

4./
 -(
 '	

 

 
 
 
 
 
r    r   r   c                       e Zd ZdZdZedd            ZdefdZdee	e
                  dee
         d	ee         defd
ZdS )r   zT
    Returned by `AsyncConnection.transaction()` to handle a transaction block.
    r   r!   AsyncConnection[Any]c                     | j         S r   r   r'   s    r   r2   zAsyncTransaction.connection  s
    zr    c                    K   | j         j        4 d {V  | j                             |                                            d {V  d d d           d {V  n# 1 d {V swxY w Y   | S r   r   r'   s    r   
__aenter__zAsyncTransaction.__aenter__  s      :? 	5 	5 	5 	5 	5 	5 	5 	5*//$//"3"3444444444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s   3A
A$'A$rU   rV   rW   c                   K   | j         j        t          k    rm| j        j        4 d {V  | j                            |                     |||                     d {V cd d d           d {V  S # 1 d {V swxY w Y   d S dS r~   r   r   s       r   	__aexit__zAsyncTransaction.__aexit__  s@      ;##z X X X X X X X X!Z__T^^Hgv-V-VWWWWWWWWX X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 5s   5A22
A<?A<N)r!   r   )r)   r*   r&   r+   r   r2   r   r   r   r   r   r   r   r   r-   r    r   r   r     s          J   X$    

4./
 -(
 '	

 

 
 
 
 
 
r    r   r   )*r+   loggingtypesr   typingr   r   r   r   r   r	   r6   r   r   r   eabcr   r   _compatr   pq.miscr   r   r2   r   connection_asyncr   TransactionStatusr{   
ConnStatusr   	getLoggerr)   r\   r[   r   ProgrammingErrorr/   r1   r   r   r-   r    r   <module>r      s4           J J J J J J J J J J J J J J J J                   & & & & & & & &       ' ' ' ' ' ' 2&&&&&&111111	 ]		8	$	$F F F F Fy F F F*4 4 4 4 41#5 4 4 4m
 m
 m
 m
 m
gn- m
 m
 m
`    /"34   <    '=>     r    