
    (ph6                       S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
JrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJrJr  SSKJr  SSKJr  SSKJr  \(       a  SSKJr  \R@                  RB                  r"\R@                  RF                  r$\RJ                  RB                  r!\RJ                  RF                  r#\RL                  RN                  r'\RL                  RP                  r(Sr)S\)-  r*Sr+\RX                  S:H  r- " S S\\   5      r. " S S\5      r/ " S S\/5      r0 " S S\/5      r1 S0       S1S jjr2 S0       S1S jjr3S2S jr4S2S jr5\Rl                  " S5      Rn                  r8\Rl                  " S 5      Rn                  r9\Rl                  " S5      Rt                  r;\Rl                  " S 5      Rt                  r<S!r=S"r>S#r?\R                  " S$5      rAS%S&S'S(S)S*S+S,.rB\B4S3S- jjrC\R                  " S.5      rD\BR                  5        V Vs0 s H  u  pX_M	     snn rF\F4S3S/ jjrG\(       a1  \R                  rH\R                  rI\R                  rJ\R                  rKg\2rH\3rI\4rJ\5rKgs  snn f )4z
psycopg copy support
    )annotationsN)ABCabstractmethod)AnyGenericMatchSequenceTYPE_CHECKING   )pq)adapt)errors)BufferConnectionTypePQGenTransformer)connection_summary)_psycopg)	copy_from)
BaseCursori      i   darwinc                  x    \ rS rSr% SrS\S'   SS.   SS jjrSS jrSS	 jrSS
 jr	SS jr
SS jrSS jrSrg)BaseCopy:   a  
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                  Xl         UR                  U l        U R                  R                  U l        UR                  nU(       a|  UR
                  U l        U R                  [        :w  aV  U R                  [        :w  aB  [        R                  " S[        R                  " U R                  5      R                   S35      eO[        U l        Uc  [        U=(       a    UR                  5      n[!        USS 5      =(       d    ["        R$                  " U5      nU(       a  ['        U5      U l        O"[+        X@R                  R,                  S9U l        SU l        g )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        E/var/www/html/venv/lib/python3.13/site-packages/psycopg/_copy_base.py__init__BaseCopy.__init__K   s      ++--$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                    U R                   R                   SU R                   R                   3n[        U R                  5      nSU SU S[        U 5      S S3$ )N.< z at 0xx>)	__class__
__module____qualname__r   r%   id)r6   clsinfos      r9   __repr__BaseCopy.__repr__k   sW    **+1T^^-H-H,IJ!$,,/3%qfRXaL22r<   c                <    U R                   (       a  [        S5      eg )Nz!copy blocks can be used only once)r5   	TypeErrorr6   s    r9   _enterBaseCopy._enterp   s    >>?@@ r<   c                   U R                   R                  R                  nU Vs/ s H+  n[        U[        5      (       a  UOUR                  U5      PM-     nnU R                  [        :X  a:  U R                  R                  R                  X@R                  R                  5        gU R                  R                  R                  X@R                  R                  5        gs  snf )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)r6   rR   registrytoidss        r9   	set_typesBaseCopy.set_typest   s    & ;;''--JOP%QZ3''X-=-=a-@@%P??g%NN&&77nn>S>STNN&&77nn>S>ST Qs   2C!c              #    #    U R                   (       a  [        S5      $ [        U R                  5       S h  vN n[	        U[        5      (       a  U$ SU l         UR
                  nUb  UOSU R                  l        [        S5      $  NO7f)Nr<   T)r5   
memoryviewr   r%   rS   command_tuplesr"   	_rowcount)r6   resnrowss      r9   	_read_genBaseCopy._read_gen   sq     >>c?""4<<00c:&&J  "").):# 1s   5B	BAB	c              #     #    U R                  5        S h  vN nU(       d  g U R                  R                  U5      nUc   U R                  5        S h  vN   SU l        g U$  NL N7fNT)rf   r   	parse_rowr5   )r6   datarows      r9   _read_row_genBaseCopy._read_row_gen   s\     ..**nn&&t,;~~'''!DN
 + (s!   A'A#=A'A%A'%A'c              #     #     U R                  5        S h  vN (       a!   U R                  5        S h  vN (       a  M   g g  N+ N! [        R                   a     g f = f7fN)rf   r+   QueryCanceledrM   s    r9   _end_copy_out_genBaseCopy._end_copy_out_gen   sG     	"nn... #nn.... 		sH   A!A AA A	A A!A A AA!AA!)r(   r5   r%   r#   r"   r   )r"   zBaseCursor[ConnectionType, Any]r   zbool | None)returnstr)rt   None)rR   zSequence[int | str]rt   rv   )rt   zPQGen[Buffer])rt   zPQGen[tuple[Any, ...] | None])rt   zPQGen[None])__name__rD   rE   __firstlineno____doc____annotations__r:   rI   rN   r]   rf   rm   rr   __static_attributes__ r<   r9   r   r   :   sL      #	/ 	@3
AU:&r<   r   c                  ~    \ rS rSr% SrS\S'   SS jr\SS j5       r\SS j5       r	\SS j5       r
\SS	 j5       rS
rg)r      z8
A class which understand a copy format (text, binary).
z	pq.FormatrX   c                <    Xl         [        5       U l        SU l        g NF)rV   	bytearray_write_buffer	_row_mode)r6   rV   s     r9   r:   Formatter.__init__   s    &&[r<   c                    g rp   r|   r6   rk   s     r9   rj   Formatter.parse_row   s    ADr<   c                    g rp   r|   r6   buffers     r9   writeFormatter.write   s    58r<   c                    g rp   r|   )r6   rl   s     r9   	write_rowFormatter.write_row   s    7:r<   c                    g rp   r|   rM   s    r9   endFormatter.end   s     r<   )r   r   rV   NrV   r   rk   r   rt   ztuple[Any, ...] | Noner   Buffer | strrt   r   rl   Sequence[Any]rt   r   rt   r   )rw   rD   rE   rx   ry   rz   r:   r   rj   r   r   r   r{   r|   r<   r9   r   r      sN     
 D D8 8: :   r<   r   c                  f   ^  \ rS rSr\rS	S
U 4S jjjrSS jrSS jrSS jr	SS jr
SS jrSrU =r$ )r3      c                0   > [         TU ]  U5        X l        g rp   )superr:   r4   )r6   rV   r!   rC   s      r9   r:   TextFormatter.__init__   s    %!r<   c                <    U(       a  [        XR                  5      $ g rp   )parse_row_textrV   r   s     r9   rj   TextFormatter.parse_row   s    !$(8(899r<   c                6    U R                  U5      nSU l        U$ ri   _ensure_bytes_signature_sentr6   r   rk   s      r9   r   TextFormatter.write       !!&)#r<   c                    SU l         [        XR                  U R                  5        [	        U R                  5      [
        :  a  U R                  [        5       so l        U$ gNTr<   )r   format_row_textrV   r   lenBUFFER_SIZEr   r6   rl   r   s      r9   r   TextFormatter.write_row   sQ     --t/A/ABt!!"[0)-););Y[&F&Mr<   c                <    U R                   [        5       sol         U$ rp   )r   r   r   s     r9   r   TextFormatter.end   s    %)%7%7""r<   c                f    [        U[        5      (       a  UR                  U R                  5      $ U$ rp   )rS   ru   encoder4   r   s     r9   r   TextFormatter._ensure_bytes   s)    dC  ;;t~~..
 Kr<   )r4   r   r   r   )zutf-8)rV   r   r!   ru   r   r   r   r   rk   r   rt   r   )rw   rD   rE   rx   TEXTrX   r:   rj   r   r   r   r   r{   __classcell__rC   s   @r9   r3   r3      s0    F" "

 r<   r3   c                  b   ^  \ rS rSr\rS	U 4S jjrS
S jrSS jrSS jr	SS jr
SS jrSrU =r$ )r2      c                2   > [         TU ]  U5        SU l        g r   )r   r:   r   )r6   rV   rC   s     r9   r:   BinaryFormatter.__init__  s    %$r<   c                    U R                   (       dJ  US [        [        5       [        :w  a  [        R                  " S5      eSU l         U[        [        5      S  nOU[
        :X  a  g [        XR                  5      $ )Nz5binary copy doesn't start with the expected signatureT)r   r   _binary_signaturer+   	DataError_binary_trailerparse_row_binaryrV   r   s     r9   rj   BinaryFormatter.parse_row  so    ##,c+,-1BBkkK  $(D -.01D_$&6&677r<   c                6    U R                  U5      nSU l        U$ ri   r   r   s      r9   r   BinaryFormatter.write  r   r<   c                (   SU l         U R                  (       d   U =R                  [        -  sl        SU l        [	        XR
                  U R                  5        [        U R                  5      [        :  a  U R                  [        5       so l        U$ gr   )	r   r   r   r   format_row_binaryrV   r   r   r   r   s      r9   r   BinaryFormatter.write_row  st     ##"33#'D #//1C1CDt!!"[0)-););Y[&F&Mr<   c                   U R                   (       d3  U =R                  [        -  sl        U =R                  [        -  sl        O*U R                  (       a  U =R                  [        -  sl        U R                  [        5       sol        U$ rp   )r   r   r   r   r   r   r   s     r9   r   BinaryFormatter.end)  sd     ##"33/1^^ /1%)%7%7""r<   c                F    [        U[        5      (       a  [        S5      eU$ )Nz6cannot copy str data in binary mode: use bytes instead)rS   ru   rL   r   s     r9   r   BinaryFormatter._ensure_bytes<  s"    dC  TUU
 Kr<   )r   r   r   r   r   r   r   r   r   )rw   rD   rE   rx   BINARYrX   r:   rj   r   r   r   r   r{   r   r   s   @r9   r2   r2      s+    F%8
 & r<   r2   c                    Uc
  [        5       nU (       d  US-  nU$ UR                  U [        /[        U 5      -  5      nU H)  nX$b  [        R                  [        U5      OS-  nUS-  nM+     SUSS& U$ )z6Convert a row of objects to the data to send for copy.N   
   \N   	r`   )r   dump_sequencePY_TEXTr   _dump_resub	_dump_subrl   r8   outadaptedbs        r9   _format_row_textr   F  s|     {ku
sWIC$89G]x||Iq)Fu  CHJr<   c                    Uc
  [        5       nU[        [        U 5      5      -  nUR                  U [        /[        U 5      -  5      nU H,  nUb  U[        [        U5      5      -  nX$-  nM#  U[        -  nM.     U$ )z=Convert a row of objects to the data to send for binary copy.)r   
_pack_int2r   r   	PY_BINARY
_pack_int4_binary_nullr   s        r9   _format_row_binaryr   Z  sz     {k:c#hCsYK#c($:;G=:c!f%%CHC<C  Jr<   c                   [        U [        5      (       d  [        U 5      n U R                  S5      nUS   S S US'   U Vs/ s H$  o3S:X  a  S O[        R	                  [
        U5      PM&     nnUR                  U5      $ s  snf )Nr   r`   r   )rS   bytessplit_load_rer   	_load_subload_sequence)rk   r8   fieldsfrl   s        r9   _parse_row_textr   m  sx    dE""T{ZZFCRF2JHN
O1;4HLLA$>>C
OC   Ps   +A?c                    / n[        U S5      S   nSn[        U5       HH  n[        X5      S   nUS-  nUS:  a  UR                  XXF-    5        XF-  nM7  UR                  S 5        MJ     UR	                  U5      $ )Nr      r   )_unpack_int2range_unpack_int4appendr   )rk   r8   rl   nfieldsposilengths          r9   _parse_row_binaryr   v  s    !C4#A&G
C7^d(+qQ;JJt#,/0MCJJt  C  r<   z!hz!is   PGCOPY

         s   s   s
   [	
\\]s   \bs   \ts   \ns   \vs   \fs   \rs   \\)   r   r               \c                (    XR                  S5         $ Nr   groupm__maps     r9   r   r         r<   s   \\[btnvfr\\]c                (    XR                  S5         $ r   r   r   s     r9   r   r     r  r<   rp   )rl   r   r8   r   r   zbytearray | Nonert   r   )rk   r   r8   r   rt   ztuple[Any, ...])r   zMatch[bytes]r   zdict[bytes, bytes]rt   r   )Lry   
__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   r3   r2   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   00r9   <module>r     s   # 	 
  # ? ?    ; ; '  !(
..

NN!!		yy~~			
--

==!!
 
 k/ 
 ||x'}w~& }@! !2)I )XDi DP BF	'.>* BF	'.>&!!  ]]4 %%
]]4 %%
}}T"..}}T".. 
 "::+,
 <F  ::)*)//121tqad12
 <F 
 ..O 22,,N00 'O*$N(% 3s   I5