
    R
h$                       d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZ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 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()
    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericIterator   )errors)pqsql)ConnectionTypePQGen)Self)connection_summary)
Connection)AsyncConnectionc                  (    e Zd ZdZdZd
ddZd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 | AsyncTransaction | Nonec                    || _         d S N)r   )selfr   s     ^/var/www/html/01_SiteInternet/03_Maps/venv/lib/python3.11/site-packages/psycopg/transaction.py__init__zRollback.__init__)   s    &    returnstrc                0    | j         j         d| j        dS )N())	__class____qualname__r   r   s    r   __repr__zRollback.__repr__,   s!    .-EE0@EEEEr   r   )r   r   r   r   )__name__
__module__r$   __doc__r   r&    r   r   r   r      sX          J' ' ' ' '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-   0   s        3333r   r-   c                      e Zd Z	 	 d#d$d	Zed%d            Zd&dZd'dZd(dZd'dZ	d)dZ
d*dZd*dZd*dZd+dZd,d"ZdS )-BaseTransactionNF
connectionr   savepoint_name
str | Noneforce_rollbackboolc                    || _         | j         j        | _        |pd| _        || _        dx| _        | _        d| _        d| _        d S )N F)_connpgconn_savepoint_namer3   _entered_exited_outer_transaction_stack_index)r   r0   r1   r3   s       r   r   zBaseTransaction.__init__5   sP      
j'-3,',,"'r   r   c                    | j         S )zV
        The name of the savepoint; `!None` if handling the main transaction.
        )r:   r%   s    r   r1   zBaseTransaction.savepoint_nameC   s     ##r   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<   r1   id)r   clsinfostatussps        r   r&   zBaseTransaction.__repr__L   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   PQGen[None]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_genY   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type[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | NonePQGen[bool]c              #    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)r3   _commit_gen_rollback_genr-   	Exceptionloggerwarning)r   rV   rX   rZ   exc2s        r   	_exit_genzBaseTransaction._exit_genb   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   rS   )r   exrT   s      r   r^   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              #    K   t          |t                    r$t                              | j         dd           |                     d          }d| _        |r||                                 D ]"}| j                            |          E d {V  #| j        j	        
                                 | j        j	                            | 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   ra   debugr8   rg   r<   _get_rollback_commandsrS   	_preparedclearmaintain_genr   )r   rX   ri   rT   s       r   r_   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 	
""$$$:'44TZ@@@@@@@@@gx(( 	& '*=*E*Etur   Iterator[bytes]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   rR   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   rv   rw   rx   ry   r8   _num_transactionsr%   s    r   rh   z$BaseTransaction._get_commit_commands   s       	(? 	%%t';<<==$*%%   " 	z3333OOOOO	 	r   c              #    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  d S d S )NzROLLBACK TO {n})nzRELEASE {n}s   ROLLBACKr{   r%   s    r   ro   z&BaseTransaction._get_rollback_commands   s       
	(? 
	)**#.)=>>??$*%%   &&#.)=>>??$*%%   " 	z3333	 	r   Nonec                    | 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   r|   r:   r>   r%   s    r   rQ   zBaseTransaction._push_savepoint   s     #'+"@D"H" 	R z33333 ' R'Qtz/Ka/O'Q'Q$ J8
$$)$$$$r   actionException | Nonec                    | 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   r|   r>   r-   )r   r   s     r   rg   zBaseTransaction._pop_savepoint   sW     	
$$)$$:'4+<<<4+F6FFFF
 
 	
r   NF)r0   r   r1   r2   r3   r4   )r   r2   r'   )r   rN   )rV   rW   rX   rY   rZ   r[   r   r\   )rX   rY   r   r\   )r   rs   )r   r   )r   r   r   r   )r(   r)   r$   r   propertyr1   r&   rU   rd   r^   r_   rR   rh   ro   rQ   rg   r+   r   r   r/   r/   4   s!        &*$	     $ $ $ X$B B B B9 9 9 9   29 9 9 9   ,	 	 	 	
 
 
 
   "* * * *&
 
 
 
 
 
r   r/   c                  >    e Zd ZdZdZedd            ZddZddZdS )TransactionzO
    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   r0   zTransaction.connection   s     zr   r   c                    | j         j        5  | j                             |                                            d d d            n# 1 swxY w Y   | S r   r8   lockwaitrU   r%   s    r   	__enter__zTransaction.__enter__   s    Z_ 	/ 	/JOODOO--...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   -AA
A
rV   rW   rX   rY   rZ   r[   r4   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   rd   r   rV   rX   rZ   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   rV   rW   rX   rY   rZ   r[   r   r4   )r(   r)   r$   r*   r   r0   r   r   r+   r   r   r   r      sk          J   X   

 
 
 
 
 
r   r   r   c                  >    e Zd ZdZdZedd            ZddZddZdS )AsyncTransactionzT
    Returned by `AsyncConnection.transaction()` to handle a transaction block.
    r   r   AsyncConnection[Any]c                    | j         S r   r   r%   s    r   r0   zAsyncTransaction.connection	  s
    zr   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$rV   rW   rX   rY   rZ   r[   r4   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$   r*   r   r0   r   r   r+   r   r   r   r     sk          J   X   

 
 
 
 
 
r   r   r   ))r*   
__future__r   loggingtypesr   typingr   r   r   r   r6   r
   er   r   abcr   r   _compatr   pq.miscr   r0   r   connection_asyncr   TransactionStatusr   
ConnStatusr   	getLoggerr(   ra   r`   r   ProgrammingErrorr-   r/   r   r   r+   r   r   <module>r      s    # " " " " "        8 8 8 8 8 8 8 8 8 8 8 8               & & & & & & & &       ' ' ' ' ' ' 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   