
    2i76                       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 ddl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/      Z1d1dZ2d1d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d3d0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)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        Q/var/www/html/secretsanta/venv/lib/python3.12/site-packages/psycopg/_copy_base.py__init__zBaseCopy.__init__L   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)r4   clsinfos      r7   __repr__zBaseCopy.__repr__h   sW    **+1T^^-H-H,IJ!$,,/3%qfRXaL22r9   c                2    | j                   rt        d      y )Nz!copy blocks can be used only once)r3   	TypeErrorr4   s    r7   _enterzBaseCopy._enterm   s    >>?@@ r9   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)r4   rM   registrytoidss        r7   	set_typeszBaseCopy.set_typesq   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)Nr9   T)r3   
memoryviewr   r#   rN   command_tuplesr    	_rowcount)r4   resnrowss      r7   	_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)r`   r   	parse_rowr3   )r4   datarows      r7   _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)r`   r)   QueryCanceledrI   s    r7   _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)rk   None)rM   zSequence[int | str]rk   rm   )rk   zPQGen[Buffer])rk   zPQGen[tuple[Any, ...] | None])rk   zPQGen[None])__name__rA   rB   __doc____annotations__r8   rF   rJ   rX   r`   rf   rj    r9   r7   r   r   ;   sK      QU5BM83
AU:&
r9   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.FormatrS   c                >    || _         t               | _        d| _        y NF)rQ   	bytearray_write_buffer	_row_mode)r4   rQ   s     r7   r8   zFormatter.__init__   s    &&[r9   c                     y rh   rq   r4   rd   s     r7   rc   zFormatter.parse_row   s    ADr9   c                     y rh   rq   r4   buffers     r7   writezFormatter.write   s    58r9   c                     y rh   rq   )r4   re   s     r7   	write_rowzFormatter.write_row   s    7:r9   c                     y rh   rq   rI   s    r7   endzFormatter.end   s     r9   NrQ   r   rd   r   rk   ztuple[Any, ...] | Noner|   Buffer | strrk   r   re   Sequence[Any]rk   r   rk   r   )rn   rA   rB   ro   rp   r8   r   rc   r}   r   r   rq   r9   r7   r   r      sN     
 D D8 8: :   r9   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 )r1   c                2    t         |   |       || _        y rh   )superr8   r2   )r4   rQ   r   r@   s      r7   r8   zTextFormatter.__init__   s    %!r9   c                :    d }|rt        || j                        }|S rh   )parse_row_textrQ   r4   rd   rvs      r7   rc   zTextFormatter.parse_row   s!    %)d&6&67B	r9   c                6    | j                  |      }d| _        |S rb   _ensure_bytes_signature_sentr4   r|   rd   s      r7   r}   zTextFormatter.write       !!&)#r9   c                    d| _         t        || j                  | j                         t	        | j                        t
        kD  r| j                  t               c}| _        |S yNTr9   )rw   format_row_textrQ   rv   lenBUFFER_SIZEru   r4   re   r|   s      r7   r   zTextFormatter.write_row   sU     T--t/A/ABt!!"[0)-););Y[&FD&Mr9   c                >    | j                   t               c}| _         |S rh   )rv   ru   r{   s     r7   r   zTextFormatter.end   s    %)%7%7""r9   c                \    t        |t              r|j                  | j                        S |S rh   )rN   rl   encoder2   ry   s     r7   r   zTextFormatter._ensure_bytes   s&    dC ;;t~~..
 Kr9   )zutf-8)rQ   r   r   rl   r   r   r   r   rd   r   rk   r   )rn   rA   rB   TEXTrS   r8   rc   r}   r   r   r   __classcell__r@   s   @r7   r1   r1      s&    F"

r9   r1   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 )r0   c                2    t         |   |       d| _        y rt   )r   r8   r   )r4   rQ   r@   s     r7   r8   zBinaryFormatter.__init__   s    %$r9   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_binaryrQ   r   s      r7   rc   zBinaryFormatter.parse_row  sw    %)##,c+,-1BBkkK  $(D -.01D?"!$(8(89B	r9   c                6    | j                  |      }d| _        |S rb   r   r   s      r7   r}   zBinaryFormatter.write  r   r9   c                    d| _         | j                  s | xj                  t        z  c_        d| _        t	        || j
                  | j                         t        | j                        t        kD  r| j                  t               c}| _        |S yr   )	rw   r   rv   r   format_row_binaryrQ   r   r   ru   r   s      r7   r   zBinaryFormatter.write_row  sx     ##"33#'D #t//1C1CDt!!"[0)-););Y[&FD&Mr9   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 rh   )r   rv   r   r   rw   ru   r{   s     r7   r   zBinaryFormatter.end'  sf     ##"33/1^^ /1%)%7%7""r9   c                <    t        |t              rt        d      |S )Nz6cannot copy str data in binary mode: use bytes instead)rN   rl   rH   ry   s     r7   r   zBinaryFormatter._ensure_bytes:  s    dC TUU
 Kr9   r   r   r   r   r   r   )rn   rA   rB   BINARYrS   r8   rc   r}   r   r   r   r   r   s   @r7   r0   r0      s&    F% 
 &r9   r0   c                    | s|dz  }y|j                  | t        gt        |       z        }|D ](  }||t        j	                  t
        |      ndz  }|dz  }* d|dd y)z6Convert a row of objects to the data to send for copy.   
N   \N   	rZ   )dump_sequencePY_TEXTr   _dump_resub	_dump_subre   r6   outadaptedbs        r7   _format_row_textr   D  sn    usWIC$89G Q]x||Iq)Fu CHr9   c                    |j                  | t        gt        |       z        }|t        t        |             z  }|D ]*  }||t	        t        |            z  }||z  }"|t
        z  }, y)z=Convert a row of objects to the data to send for binary copy.N)r   	PY_BINARYr   
_pack_int2
_pack_int4_binary_nullr   s        r7   _format_row_binaryr   R  sl    sYK#c($:;G:c#hC  =:c!f%%C1HC<C r9   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   rZ   r   )rN   bytessplit_load_rer   	_load_subload_sequence)rd   r6   fieldsfre   s        r7   _parse_row_textr   ^  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   )rd   r6   re   nfieldsposilengths          r7   _parse_row_binaryr   g  s    !C4#A&G
C7^ dC(+qQ;JJtC#,/06MCJJt C  r9   z!hz!is   PGCOPY

         s   s   s
   [	
\\]s   \bs   \ts   \ns   \vs   \fs   \rs   \\)   r   r               \c                *    || j                  d         S Nr   groupm__maps     r7   r   r         r9   s   \\[btnvfr\\]c                *    || j                  d         S r   r   r   s     r7   r   r     r   r9   )re   r   r6   r   r   ru   rk   rm   )rd   r   r6   r   rk   ztuple[Any, ...])r   zre.Match[bytes]r   zdict[bytes, bytes]rk   r   )Lro   
__future__r   resysstructabcr   r   typingr   r   r   collections.abcr	    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   r1   r0   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   00r7   <module>r     sJ   # 	 
  # . . $    ; ; '  !(
..

NN!!		yy~~			
--

==!!
 
 k/ 
 ||x'ww~& wt! !2*I *ZFi FR	 !!  V]]4 %%
V]]4 %%
v}}T"..v}}T".. 
 "2::+,
 ?I  2::)*)//12tq!ad2
 ?I 
 ..O 22,,N00 'O*$N(% 3s   =I