Ë
    êëj6  ã                  ó¨  — 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/«      Z1d0d„Z2d0d„Z3d1d„Z4d1d„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d2d-„ZC ej€                  d.«      ZDeBj‹                  «       D � �ci c]  \  } }|| “Œ
 c}} ZFeFfd2d/„ZGer1ej�                  ZHej’                  ZIej”                  ZJej–                  ZKye2ZHe3ZIe4ZJe5ZKyc c}} w )3z
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        úY/var/www/html/kelly/kelly-backend/venv/lib/python3.12/site-packages/psycopg/_copy_base.pyÚ__init__zBaseCopy.__init__K   s  € ð ˆŒØ ×+Ñ+ˆŒØ—‘×-Ñ-ˆŒà—_‘_Ð$ˆ6Ð$Ø$Ÿm™mˆDŒOØ�‰¤'Ò)¨d¯o©oÄÒ.IÜ×(Ñ(ð&Ü&(§m¡m°D·O±OÓ&D×&IÑ&IÐ%JÈ(ðTóð ô
 &ˆDŒOàˆ>Ü˜&Ò9 V×%9Ñ%9Ó:ˆFä! &¨%°Ó6ÒS¼%×:KÑ:KÈFÓ:SˆÙÜ,¨RÓ0ˆDŒNð ˆ�ô +¨2¸¿¹×8NÑ8NÔOˆDŒNàˆ�ó    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   € Ø—‘×*Ñ*Ð+¨1¨T¯^©^×-HÑ-HÐ,IÐJˆÜ! $§,¡,Ó/ˆØ�3�%�q˜˜˜f¤R¨£X¨a L°Ð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ÓPÉ%ÀQ”Z ¤3Ô'‘¨X×-=Ñ-=¸aÓ-@Ñ@È%ˆÐPà�?‰?œgÒ%Ø�N‰N×&Ñ&×7Ñ7¸¸d¿n¹n×>SÑ>SÕTà�N‰N×&Ñ&×7Ñ7¸¸d¿n¹n×>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ð ˆŒð ×"Ñ"ˆØ).Ð):¡Àˆ�‰ÔÜ˜#‹Ðð 1ús   ‚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   è ø€ Ø$(§N¡NÓ$4×4Ð5�Ð5Øà—>‘>×+Ñ+¨DÓ1Ð1ˆCÐ:à—~‘~Ó'×'Ð'Ø!ˆDŒNØàˆ
ð 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   è ø€ ð	Ø"Ÿn™nÓ.×.Ð.Øð #Ÿn™nÓ.×.Ô.øÐ.ùä�‰ò 	Ùð	ü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Ó7ˆBàˆ	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»[Ð&ˆF�DÔ&Øˆ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&   € Ü�dœCÔ Ø—;‘;˜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Ü—k‘kØKóð ð $(ˆDÔ ØœÔ-Ó.Ð0Ð1ˆDà”?Ò"Ü! $¨×(8Ñ(8Ó9ˆBàˆ	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×/Ñ/°×1CÑ1CÔDÜˆt×!Ñ!Ó"¤[Ò0Ø)-×);Ñ);¼Y»[Ð&ˆF�DÔ&Øˆ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   € Ü�dœCÔ ÜÐ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                ó¾   — | 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ó   	r[   )Údump_sequenceÚPY_TEXTrš   Ú_dump_reÚsubÚ	_dump_sub©rf   r7   ÚoutÚadaptedÚbs        r8   Ú_format_row_textr¾   C  si   € áØˆu‰ˆØà×Ñ˜s¤W I´°C³Ñ$8Ó9€GÛˆØ¨Q¨]Œx�|‰|œI qÔ)ÀÑFˆØˆu‰‰ð ð €Cˆˆ�Hr:   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        r8   Ú_format_row_binaryrÄ   Q  sg   € à×Ñ˜s¤Y K´#°c³(Ñ$:Ó;€GØŒ:”c˜#“hÓÑ€CÛˆØˆ=Ø”:œc !›fÓ%Ñ%ˆCØ�1‰H‰Cà”<Ñ‰Cñ r:   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Í   ]  sw   € Ü�dœEÔ"Ü�T‹{ˆØ�Z‰Z˜Ó€FØ˜‘˜C˜R�€Fˆ2�JÙHNÓ
OÉÀ1�1˜’;‰4¤H§L¡L´¸AÓ$>Ñ>È€CÐ
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Ø   f  s‹   € Ø!€CÜ˜4 Ó# AÑ&€GØ
€CÜ�7Ž^ˆÜ˜d CÓ(¨Ñ+ˆØˆq‰ˆØ�QŠ;Ø�J‰J�t˜C #¨¡,Ð/Ô0Ø�6‰M‰Cà�J‰J�tÕð ð ×Ñ˜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:   )rf   rˆ   r7   r   r»   rv   rl   rn   )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     sM  ðñõ #ã 	Û 
Û ß #ß ?Õ ?å Ý Ý ß ;Ó ;Ý 'Ý Ý !áÝ(à
�.‰.×
Ñ
€Ø�N‰N×!Ñ!€	à	‡y�y‡~�~€Ø	�‰×	Ñ	€à
�-‰-×
Ñ
€Ø�=‰=×!Ñ!€ð
 €ð
 �k‘/€ð €
ð �|‰|˜xÑ'€ôwˆw�~Ñ&ô wôt!�ô !ô2*�Iô *ôZF�iô FóRó	 ó!ó!ð  ˆV�]‰]˜4Ó ×%Ñ%€
ØˆV�]‰]˜4Ó ×%Ñ%€
Øˆv�}‰}˜TÓ"×.Ñ.€Øˆv�}‰}˜TÓ"×.Ñ.€ðð ð
 €Ø"€àˆ2�:‰:Ð+Ó,€àØØØØØØñ€
ð <Fô ð ˆ2�:‰:Ð)Ó*€Ø)×/Ñ/Ô1Ô2Ñ1‘t�q˜!ˆa�‰dÐ1Ò2€
ð <Fô ñ
 Ø×.Ñ.€OØ ×2Ñ2ÐØ×,Ñ,€NØ×0Ñ0Ñð '€OØ*ÐØ$€NØ(Ñùó% 3s   Ç;I