
    i$                       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j6                  j8                  Zej:                  j<                  Z ej>                  e       Z! G d de"      Z# G d dejH                        Z% G d de	e         Z& G d de&d         Z' G d de&d         Z(y)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y)	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.
    psycopgNc                    || _         y N)transaction)selfr   s     s/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg/transaction.py__init__zRollback.__init__)   s
    &    c                N    | j                   j                   d| j                  dS )N())	__class____qualname__r   r   s    r   __repr__zRollback.__repr__,   s'    ..--.a0@0@/C1EEr   r   )r   z%Transaction | AsyncTransaction | Nonereturnstr)__name__
__module__r!   __doc__r   r#    r   r   r   r      s     J'Fr   r   c                      e Zd ZdZy)OutOfOrderTransactionNestingz)Out-of-order transaction nesting detectedN)r'   r(   r!   r)   r*   r   r   r,   r,   0   s    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y)BaseTransactionNc                    || _         | j                   j                  | _        |xs d| _        || _        dx| _        | _        d| _        d| _        y )N F)_connpgconn_savepoint_nameforce_rollback_entered_exited_outer_transaction_stack_index)r   
connectionsavepoint_namer5   s       r   r   zBaseTransaction.__init__5   sO      
jj''-3,',,"'r   c                    | j                   S )zV
        The name of the savepoint; `!None` if handling the main transaction.
        )r4   r"   s    r   r;   zBaseTransaction.savepoint_nameC   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 r0   <r   z) z at 0xx>)	r    r(   r!   r   r3   r6   r7   r;   id)r   clsinfostatussps        r   r#   zBaseTransaction.__repr__L   s    **+1T^^-H-H,IJ!$++.}}FF!F,0,?,?##&a(R3%qAfXRvVBtHQ<qAAr   c              #     K   | j                   rt        d      d| _         | j                          | j                         D ]%  }| j                  j                  |      E d {    ' y 7 w)Nz(transaction blocks can be used only onceT)r6   	TypeError_push_savepoint_get_enter_commandsr2   _exec_command)r   commands     r   
_enter_genzBaseTransaction._enter_genY   s_     ==FGG//1 	9Gzz//888	98s   A A,"A*#A,c              #     K   |s%| j                   s| j                         E d {    y	 | j                  |      E d {   S 7 7 # t        $ r  t        $ r!}t
        j                  d| |       Y d }~yd }~ww xY ww)NFz#error ignored in rollback of %s: %s)r5   _commit_gen_rollback_genr,   	Exceptionloggerwarning)r   exc_typeexc_valexc_tbexc2s        r   	_exit_genzBaseTransaction._exit_genb   s|      t22'')))#'#5#5g#>>? * ?/   DdDQsI   "A>AA>A A A A>A A;A61A>6A;;A>c              #     K   | j                  d      }d| _        |r|| j                         D ]%  }| j                  j	                  |      E d {    ' y 7 w)NcommitT)_pop_savepointr7   _get_commit_commandsr2   rO   )r   exrP   s      r   rS   zBaseTransaction._commit_gen{   sX       *H002 	9Gzz//888	98s   AAAAc              #  0  K   t        |t              r$t        j                  | j                   dd       | j                  d      }d| _        |r|| j                         D ]%  }| j                  j                  |      E d {    ' | j                  j                  j                          | j                  j                  j                  | j                        E d {    t        |t              r|j                  r|j                  | u ryy7 7 2w)Nz: Explicit rollback from: T)exc_inforollbackF)
isinstancer   rV   debugr2   r_   r7   _get_rollback_commandsrO   	_preparedclearmaintain_genr   )r   rY   ra   rP   s       r   rT   zBaseTransaction._rollback_gen   s     gx(LLDJJ<'ABTLR  ,H224 	9Gzz//888	9 	

""$::''44TZZ@@@gx(&&'*=*=*E 9 	As%   BDDAD!D"1DDc              #  .  K   | j                   r| j                  j                          | j                  r]t	        j
                  d      j                  t	        j                  | j                              j                  | j                         y y w)NzSAVEPOINT {})	r8   r2   _get_tx_start_commandr4   r   SQLformat
Identifieras_bytesr"   s    r   rN   z#BaseTransaction._get_enter_commands   sh     ""**2244't';';<=$**%  s   BBc              #  F  K   | j                   rh| j                  s\t        j                  d      j	                  t        j
                  | j                               j                  | j                         | j                  r| j                  j                  rJ d y y w)Nz
RELEASE {}s   COMMIT	r4   r8   r   rm   rn   ro   rp   r2   _num_transactionsr"   s    r   r`   z$BaseTransaction._get_commit_commands   sw     (?(?%t';';<=$**% ""zz3333O #s   BB!c              #    K   | j                   r| j                  st        j                  d      j	                  t        j
                  | j                               j                  | j                         t        j                  d      j	                  t        j
                  | j                               j                  | j                         | j                  r| j                  j                  rJ d y y w)NzROLLBACK TO {n})nzRELEASE {n}s   ROLLBACKrr   r"   s    r   rg   z&BaseTransaction._get_rollback_commands   s     (?(?)*#..)=)=>?$**% &#..)=)=>?$**% ""zz3333 #s   C=C?c                ^   | j                   j                  t        k(  | _        | j                  r| j                  j
                  r/J | j                  s!d| j                  j
                  dz    | _        | j                  j
                  | _        | j                  xj
                  dz  c_        y)z
        Push the transaction on the connection transactions stack.

        Also set the internal state of the object and verify consistency.
        _pg3_r	   N)r3   transaction_statusIDLEr8   r2   rs   r4   r9   r"   s    r   rM   zBaseTransaction._push_savepoint   s     #'++"@"@D"H"" zz3333 '').tzz/K/Ka/O.P'Q$ JJ88

$$)$r   c                    | j                   xj                  dz  c_        | j                   j                  | j                  k(  ry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: )r2   rs   r9   r,   )r   actions     r   r_   zBaseTransaction._pop_savepoint   sR     	

$$)$::''4+<+<<+6("?vF
 	
r   NF)r:   r   r;   
str | Noner5   bool)r%   r}   r$   )r%   zPQGen[None])rX   type[BaseException] | NonerY   BaseException | NonerZ   TracebackType | Noner%   PQGen[bool])rY   r   r%   r   )r%   zIterator[bytes])r%   None)r{   r&   r%   zException | None)r'   r(   r!   r   propertyr;   r#   rQ   r\   rS   rT   rN   r`   rg   rM   r_   r*   r   r   r.   r.   4   s     &*$	" # 	 $ $B9, & %	
 
29,	
"*&
r   r.   c                  F    e Zd ZdZdZedd       ZddZ	 	 	 	 	 	 	 	 d	dZy)
TransactionzO
    Returned by `Connection.transaction()` to handle a transaction block.
    r   c                    | j                   S )z&The connection the object is managing.r2   r"   s    r   r:   zTransaction.connection   s     zzr   c                    | j                   j                  5  | j                   j                  | j                                d d d        | S # 1 sw Y   | S xY wr   r2   lockwaitrQ   r"   s    r   	__enter__zTransaction.__enter__   s>    ZZ__ 	/JJOODOO-.	/	/s   *AAc                    | j                   j                  t        k(  rL| j                  j                  5  | j                  j                  | j                  |||            cd d d        S y# 1 sw Y   y xY wr|   r3   rI   OKr2   r   r   r\   r   rX   rY   rZ   s       r   __exit__zTransaction.__exit__   sb     ;;# Rzzt~~h'PQR R R Rs   ,A++A4N)r%   Connection[Any]r%   r   rX   r   rY   r   rZ   r   r%   r~   )r'   r(   r!   r)   r   r:   r   r   r*   r   r   r   r      sP     J 

,
 &
 %	

 

r   r   r   c                  F    e Zd ZdZdZedd       ZddZ	 	 	 	 	 	 	 	 d	dZy)
AsyncTransactionzT
    Returned by `AsyncConnection.transaction()` to handle a transaction block.
    r   c                    | j                   S r   r   r"   s    r   r:   zAsyncTransaction.connection	  s    zzr   c                  K   | j                   j                  4 d {    | j                   j                  | j                                d {    d d d       d {    | S 7 G7 7 
# 1 d {  7  sw Y   | S xY wwr   r   r"   s    r   
__aenter__zAsyncTransaction.__aenter__  sk     ::?? 	5 	5**//$//"3444	5 	5	54	5 	5 	5 	5sV   BA%B-A+A'A+BA)B'A+)B+A>1A42A>9Bc                D  K   | j                   j                  t        k(  rd| j                  j                  4 d {    | j                  j                  | j                  |||             d {   cd d d       d {    S y7 J7 7 
# 1 d {  7  sw Y   y xY wwr|   r   r   s       r   	__aexit__zAsyncTransaction.__aexit__  s      ;;#zz X X!ZZ__T^^Hgv-VWWX X X XWX X X XsV   8B BB 0B.B/B2B >B	?B B	B BBBB N)r%   AsyncConnection[Any]r   r   )r'   r(   r!   r)   r   r:   r   r   r*   r   r   r   r     sP     J 

,
 &
 %	

 

r   r   r   ))r)   
__future__r   loggingtypesr   typingr   r   r   r   r0   r
   er   r   abcr   r   _compatr   pq.miscr   r:   r   connection_asyncr   TransactionStatusry   
ConnStatusr   	getLoggerr'   rV   rU   r   ProgrammingErrorr,   r.   r   r   r*   r   r   <module>r      s    #   8 8   &  '&1	  ]]			8	$Fy F$41#5#5 4m
gn- m
`/"34 <'=> r   