
    i6                       d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	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mZmZ ddlmZ ddlmZ ddlmZ e
rddlmZ ej@                  jB                  Z"ej@                  jF                  Z$ejJ                  jB                  Z!ejJ                  jF                  Z#ejL                  jN                  Z'ejL                  jP                  Z(dZ)de)z  Z*dZ+ejX                  dk(  Z- G d dee         Z. G d de      Z/ G d de/      Z0 G d de/      Z1	 d0	 	 	 	 	 	 	 d1dZ2	 d0	 	 	 	 	 	 	 d1dZ3d2dZ4d2dZ5 ejl                  d      jn                  Z8 ejl                  d       jn                  Z9 ejl                  d      jt                  Z; ejl                  d       jt                  Z<d!Z=d"Z>d#Z? ej                  d$      ZAd%d&d'd(d)d*d+d,ZBeBfd3d-ZC ej                  d.      ZDeBj                         D  ci c]  \  } }|| 
 c}} ZFeFfd3d/ZGer1ej                  ZHej                  ZIej                  ZJej                  ZKye2ZHe3ZIe4ZJe5ZKyc c}} w )4z
psycopg copy support
    )annotationsN)ABCabstractmethod)TYPE_CHECKINGAnyGenericMatchSequence   )adapt)errors)pq)BufferConnectionTypePQGenTransformer)connection_summary)_psycopg)	copy_from)
BaseCursori      i   darwinc                  `    e Zd ZU dZded<   dd	 	 	 ddZddZddZdd	Zdd
Z	ddZ
ddZy)BaseCopya  
    Base implementation for the copy user interface.

    Two subclasses expose real methods with the sync/async differences.

    The difference between the text and binary format is managed by two
    different `Formatter` subclasses.

    Writing (the I/O part) is implemented in the subclasses by a `Writer` or
    `AsyncWriter` instance. Normally writing implies sending copy data to a
    database, but a different writer might be chosen, e.g. to stream data into
    a file for later use.
    	Formatter	formatterN)binaryc                  || _         |j                  | _        | j                  j                  | _        |j                  x}rw|j
                  | _        | j                  t        k7  r^| j                  t        k7  rKt        j                  dt        j                  | j                        j                   d      t        | _        |t        |xr |j                        }t!        |dd       xs t#        j$                  |      }|rt'        |      | _        d| _        y t+        || j                  j,                        | _        d| _        y )NzAthe cursor should have performed a COPY operation; its status is z instead_tx)encodingF)cursor
connectionpgconn_pgconnpgresultstatus
_directionCOPY_INCOPY_OUTeProgrammingErrorr   
ExecStatusnameboolbinary_tuplesgetattrr   r   BinaryFormatterr   TextFormatter	_encoding	_finished)selfr!   r   resulttxs        r/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg/_copy_base.py__init__zBaseCopy.__init__K   s     ++--__$6$$mmDO')doo.I((&&(mmDOO&D&I&I%J(T 
 &DO>&9V%9%9:F!&%6S%:K:KF:S,R0DN  +28N8NODN    c                    | j                   j                   d| j                   j                   }t        | j                        }d| d| dt        |       ddS )N.< z at 0xx>)	__class__
__module____qualname__r   r$   id)r5   clsinfos      r8   __repr__zBaseCopy.__repr__g   sW    **+1T^^-H-H,IJ!$,,/3%qfRXaL22r:   c                2    | j                   rt        d      y )Nz!copy blocks can be used only once)r4   	TypeErrorr5   s    r8   _enterzBaseCopy._enterl   s    >>?@@ r:   c                   | j                   j                  j                  }|D cg c]%  }t        |t              r|n|j                  |      ' }}| j                  t        k(  r;| j                  j                  j                  || j                  j                         y| j                  j                  j                  || j                  j                         yc c}w )a  
        Set the types expected in a COPY operation.

        The types must be specified as a sequence of oid or PostgreSQL type
        names (e.g. ``int4``, ``timestamptz[]``).

        This operation overcomes the lack of metadata returned by PostgreSQL
        when a COPY operation begins:

        - On :sql:`COPY TO`, `!set_types()` allows to specify what types the
          operation returns. If `!set_types()` is not used, the data will be
          returned as unparsed strings or bytes instead of Python objects.

        - On :sql:`COPY FROM`, `!set_types()` allows to choose what type the
          database expects. This is especially useful in binary copy, because
          PostgreSQL will apply no cast rule.

        N)r!   adapterstypes
isinstanceintget_oidr'   r(   r   transformerset_dumper_typesformatset_loader_types)r5   rN   registrytoidss        r8   	set_typeszBaseCopy.set_typesp   s    & ;;''--JOPQZ3'X-=-=a-@@PP??g%NN&&77dnn>S>STNN&&77dnn>S>ST Qs   *Cc              #     K   | j                   rt        d      S t        | j                        E d {   }t	        |t              r|S d| _         |j
                  }||nd| j                  _        t        d      S 7 Iw)Nr:   T)r4   
memoryviewr   r$   rO   command_tuplesr!   	_rowcount)r5   resnrowss      r8   	_read_genzBaseCopy._read_gen   so     >>c?""4<<00c:&J  "").):# 1s   0A>A<A
A>c              #     K   | j                         E d {   x}sy | j                  j                  |      x} | j                         E d {    d| _        y |S 7 F7 wNT)ra   r   	parse_rowr4   )r5   datarows      r8   _read_row_genzBaseCopy._read_row_gen   sb     $(NN$4455>>++D11C:~~'''!DN
 5
 (s!   A!A7A!AA!A!c              #     K   	 | j                         E d {   r	 | j                         E d {   ry y 7  7 	# t        j                  $ r Y y w xY wwN)ra   r*   QueryCanceledrJ   s    r8   _end_copy_out_genzBaseCopy._end_copy_out_gen   sI     	"nn... #nn.... 		s=   A< 8< :< A< < AAAA)r!   zBaseCursor[ConnectionType, Any]r   zbool | None)returnstr)rl   None)rN   zSequence[int | str]rl   rn   )rl   zPQGen[Buffer])rl   zPQGen[tuple[Any, ...] | None])rl   zPQGen[None])__name__rB   rC   __doc____annotations__r9   rG   rK   rY   ra   rg   rk    r:   r8   r   r   :   sK      QU5BM83
AU:&
r:   r   c                  l    e Zd ZU dZded<   d
dZedd       Zedd       Zedd       Z	edd       Z
y	)r   z@
    A class which understand a copy format (text, binary).
    z	pq.FormatrT   c                >    || _         t               | _        d| _        y NF)rR   	bytearray_write_buffer	_row_mode)r5   rR   s     r8   r9   zFormatter.__init__   s    &&[r:   c                     y ri   rr   r5   re   s     r8   rd   zFormatter.parse_row   s    ADr:   c                     y ri   rr   r5   buffers     r8   writezFormatter.write   s    58r:   c                     y ri   rr   )r5   rf   s     r8   	write_rowzFormatter.write_row   s    7:r:   c                     y ri   rr   rJ   s    r8   endzFormatter.end   s     r:   NrR   r   re   r   rl   ztuple[Any, ...] | Noner}   Buffer | strrl   r   rf   Sequence[Any]rl   r   rl   r   )ro   rB   rC   rp   rq   r9   r   rd   r~   r   r   rr   r:   r8   r   r      sN     
 D D8 8: :   r:   r   c                  N     e Zd ZeZdd fdZd	dZd
dZddZddZ	ddZ
 xZS )r2   c                2    t         |   |       || _        y ri   )superr9   r3   )r5   rR   r    rA   s      r8   r9   zTextFormatter.__init__   s    %!r:   c                :    d }|rt        || j                        }|S ri   )parse_row_textrR   r5   re   rvs      r8   rd   zTextFormatter.parse_row   s!    %)d&6&67B	r:   c                6    | j                  |      }d| _        |S rc   _ensure_bytes_signature_sentr5   r}   re   s      r8   r~   zTextFormatter.write       !!&)#r:   c                    d| _         t        || j                  | j                         t	        | j                        t
        kD  r| j                  t               c}| _        |S yNTr:   )rx   format_row_textrR   rw   lenBUFFER_SIZErv   r5   rf   r}   s      r8   r   zTextFormatter.write_row   sU     T--t/A/ABt!!"[0)-););Y[&FD&Mr:   c                >    | j                   t               c}| _         |S ri   )rw   rv   r|   s     r8   r   zTextFormatter.end   s    %)%7%7""r:   c                \    t        |t              r|j                  | j                        S |S ri   )rO   rm   encoder3   rz   s     r8   r   zTextFormatter._ensure_bytes   s&    dC ;;t~~..
 Kr:   )zutf-8)rR   r   r    rm   r   r   r   r   re   r   rl   r   )ro   rB   rC   TEXTrT   r9   rd   r~   r   r   r   __classcell__rA   s   @r8   r2   r2      s&    F"

r:   r2   c                  L     e Zd ZeZd fdZddZd	dZd
dZddZ	ddZ
 xZS )r1   c                2    t         |   |       d| _        y ru   )r   r9   r   )r5   rR   rA   s     r8   r9   zBinaryFormatter.__init__   s    %$r:   c                    d }| j                   sG|d t        t               t        k7  rt        j                  d      d| _         |t        t              d  }|t
        k7  rt        || j                        }|S )Nz5binary copy doesn't start with the expected signatureT)r   r   _binary_signaturer*   	DataError_binary_trailerparse_row_binaryrR   r   s      r8   rd   zBinaryFormatter.parse_row  sw    %)##,c+,-1BBkkK  $(D -.01D?"!$(8(89B	r:   c                6    | j                  |      }d| _        |S rc   r   r   s      r8   r~   zBinaryFormatter.write  r   r:   c                    d| _         | j                  s | xj                  t        z  c_        d| _        t	        || j
                  | j                         t        | j                        t        kD  r| j                  t               c}| _        |S yr   )	rx   r   rw   r   format_row_binaryrR   r   r   rv   r   s      r8   r   zBinaryFormatter.write_row  sx     ##"33#'D #t//1C1CDt!!"[0)-););Y[&FD&Mr:   c                   | j                   s3| xj                  t        z  c_        | xj                  t        z  c_        n%| j                  r| xj                  t        z  c_        | j                  t               c}| _        |S ri   )r   rw   r   r   rx   rv   r|   s     r8   r   zBinaryFormatter.end&  sf     ##"33/1^^ /1%)%7%7""r:   c                <    t        |t              rt        d      |S )Nz6cannot copy str data in binary mode: use bytes instead)rO   rm   rI   rz   s     r8   r   zBinaryFormatter._ensure_bytes9  s    dC TUU
 Kr:   r   r   r   r   r   r   )ro   rB   rC   BINARYrT   r9   rd   r~   r   r   r   r   r   s   @r8   r1   r1      s&    F% 
 &r:   r1   c                    |
t               }| s|dz  }|S |j                  | t        gt        |       z        }|D ](  }||t        j                  t        |      ndz  }|dz  }* d|dd |S )z6Convert a row of objects to the data to send for copy.N   
   \N   	r[   )rv   dump_sequencePY_TEXTr   _dump_resub	_dump_subrf   r7   outadaptedbs        r8   _format_row_textr   C  s     {ku
sWIC$89G Q]x||Iq)Fu CHJr:   c                    |
t               }|t        t        |             z  }|j                  | t        gt        |       z        }|D ]*  }||t        t        |            z  }||z  }"|t        z  }, |S )z=Convert a row of objects to the data to send for binary copy.)rv   
_pack_int2r   r   	PY_BINARY
_pack_int4_binary_nullr   s        r8   _format_row_binaryr   W  s     {k:c#hCsYK#c($:;G  =:c!f%%C1HC<C  Jr:   c                    t        | t              st        |       } | j                  d      }|d   d d |d<   |D cg c]#  }|dk(  rd nt        j	                  t
        |      % }}|j                  |      S c c}w )Nr   r[   r   )rO   bytessplit_load_rer   	_load_subload_sequence)re   r7   fieldsfrf   s        r8   _parse_row_textr   j  sv    dE"T{ZZFCRF2JHN
O11;4HLLA$>>
OC
OC   Ps   (A7c                    g }t        | d      d   }d}t        |      D ]I  }t        | |      d   }|dz  }|dk\  r|j                  | |||z           ||z  }9|j                  d        K |j	                  |      S )Nr      r   )_unpack_int2range_unpack_int4appendr   )re   r7   rf   nfieldsposilengths          r8   _parse_row_binaryr   s  s    !C4#A&G
C7^ dC(+qQ;JJtC#,/06MCJJt C  r:   z!hz!is   PGCOPY

         s   s   s
   [	
\\]s   \bs   \ts   \ns   \vs   \fs   \rs   \\)   r   r               \c                *    || j                  d         S Nr   groupm__maps     r8   r   r         r:   s   \\[btnvfr\\]c                *    || j                  d         S r   r   r   s     r8   r   r     r   r:   ri   )rf   r   r7   r   r   zbytearray | Nonerl   rv   )re   r   r7   r   rl   ztuple[Any, ...])r   zMatch[bytes]r   zdict[bytes, bytes]rl   r   )Lrp   
__future__r   resysstructabcr   r   typingr   r   r   r	   r
    r   r   r*   r   r   r   r   r   pq.miscr   _cmoduler   
generatorsr   _cursor_baser   PyFormatr   r   r   r   Formatr,   r(   r)   r   MAX_BUFFER_SIZE
QUEUE_SIZEplatformPREFER_FLUSHr   r   r2   r1   r   r   r   r   Structpackr   r   unpack_fromr   r   r   r   r   compiler   
_dump_replr   r   items
_load_replr   r   r   r   r   )kvs   00r8   <module>r     s   # 	 
  # ? ?    ; ; '  !(
..

NN!!		yy~~			
--

==!!
 
 k/ 
 ||x'ww~& wt! !2*I *ZFi FT BF	'.>* BF	'.>&!!  V]]4 %%
V]]4 %%
v}}T"..v}}T".. 
 "2::+,
 <F  2::)*)//12tq!ad2
 <F 
 ..O 22,,N00 'O*$N(% 3s   I 