
    i                        d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
mZ  ej                  d      Z e
d       G d	 d
             Zde_        y)z"
psycopg two-phase commit support
    )annotationsN)	b64decode	b64encode)	dataclassreplacez^(\d+)_([^_]*)_([^_]*)$T)frozenc                      e Zd ZU dZded<   ded<   ded<   dZd	ed
<   dZded<   dZded<   edd       Z	ddZ
ddZddZedd       Zedd       ZddZedd       Ze	 	 	 	 	 	 	 	 	 	 dd       Zy)XidzA two-phase commit transaction identifier.

    The object can also be unpacked as a 3-item tuple (`format_id`, `gtrid`,
    `bqual`).

    
int | None	format_idstrgtrid
str | NonebqualNzdt.datetime | Nonepreparedownerdatabasec                ^    	 | j                  |      S # t        $ r t        d|d      cY S w xY w)zTry to parse an XA triple from the string.

        This may fail for several reasons. In such case return an unparsed Xid.
        N)_parse_string	Exceptionr
   )clsss     l/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg/_tpc.pyfrom_stringzXid.from_string!   s6    	&$$Q'' 	&tQ%%	&s    ,,c                "    | j                         S N)_as_tidselfs    r   __str__zXid.__str__,   s    ||~    c                     y)N    r   s    r   __len__zXid.__len__/   s    r!   c                N    | j                   | j                  | j                  f|   S r   )r   r   r   )r   indexs     r   __getitem__zXid.__getitem__2   s     

DJJ7>>r!   c                @   t         j                  |      x}st        d      t        |j	                  d            }t        |j	                  d            j                         }t        |j	                  d            j                         }| j                  |||      S )Nzbad Xid format      r#   )_re_xidmatch
ValueErrorintgroupr   decode
from_parts)r   r   mr   r   r   s         r   r   zXid._parse_string5   s|    ]]1%%%-..
O	!''!*%,,.!''!*%,,.~~i66r!   c                    |a|t        d      d|cxk  rdk  st        d       t        d      t        |      dkD  rt        d      t        |      dkD  rt        d      |t        d      t        |||      S )	Nz,if format_id is specified, bqual must be toor   l        z/format_id must be a non-negative 32-bit integer@   z&bqual must be not longer than 64 charsz&gtrid must be not longer than 64 charsz,if format_id is None, bqual must be None too)	TypeErrorr.   lenr
   )r   r   r   r   s       r   r2   zXid.from_parts?   s     } NOO	.J. !RSS / !RSS5zB !IJJ5zB !IJJ]JKK9eU++r!   c                6   | j                   | j                  | j                  S t        | j                  j	                               j                         }t        | j                  j	                               j                         }| j                    d| d| S )a  
        Return the PostgreSQL transaction_id for this XA xid.

        PostgreSQL wants just a string, while the DBAPI supports the XA
        standard and thus a triple. We use the same conversion algorithm
        implemented by JDBC in order to allow some form of interoperation.

        see also: the pgjdbc implementation
          http://cvs.pgfoundry.org/cgi-bin/cvsweb.cgi/jdbc/pgjdbc/org/
            postgresql/xa/RecoveredXid.java?rev=1.2
        _)r   r   r   r   encoder1   )r   egtridebquals      r   r   zXid._as_tidP   s     >>!TZZ%7:: 4::,,./6684::,,./668..!6(!F844r!   c                     y)Nz<SELECT gid, prepared, owner, database FROM pg_prepared_xactsr$   )r   s    r   _get_recover_queryzXid._get_recover_queryf   s    Mr!   c                J    t         j                  |      }t        ||||      S )N)r   r   r   )r
   r   r   )r   gidr   r   r   xids         r   _from_recordzXid._from_recordj   s#     ooc"sXUXNNr!   )r   r   returnr
   )rC   r   )rC   r/   )r'   r/   rC   zint | str | None)r   r   r   r   r   r   rC   r
   )
r@   r   r   zdt.datetimer   r   r   r   rC   r
   )__name__
__module____qualname____doc____annotations__r   r   r   classmethodr   r    r%   r(   r   r2   r   r>   rB   r$   r!   r   r
   r
      s     J#'H 'E:Hj& &? 7 7 , , 5, N N OO!,O58ODGO	O Or!   r
   psycopg)rG   
__future__r   redatetimedtbase64r   r   dataclassesr   r   compiler,   r
   rE   r$   r!   r   <module>rR      sZ    # 	  ' *
"**/
0 $]O ]O ]O@ r!   