Ë
    Ûq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/«      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)ÚAnyÚGenericÚMatchÚSequenceÚTYPE_CHECKINGé   )Úpq)Úadapt)Úerrors)Ú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                  }|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        úS/var/www/html/kelly-backend/venv/lib/python3.12/site-packages/psycopg/_copy_base.pyÚ__init__zBaseCopy.__init__K   s
  € ð ˆŒØ ×+Ñ+ˆŒØ—‘×-Ñ-ˆŒà—‘ˆÙØ$Ÿ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__k   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._enterp   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_typest   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 {  –—† }|sy | j                  j                  |«      }|€ | 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¤   s^   è ø€ ØŸ.™.Ó*×*ˆÙØà�n‰n×&Ñ& tÓ,ˆØˆ;à—~‘~Ó'×'Ð'Ø!ˆDŒNØàˆ
ð +øð (ú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   :   sL   … ñð Óð #ñ	à/ðð ó	ó@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                ó4   — |rt        || j                  «      S y ri   )Úparse_row_textrR   rz   s     r8   rd   zTextFormatter.parse_rowÚ   s   € ÙÜ! $¨×(8Ñ(8Ó9Ð9à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                óê   — | j                   sH|d t        t        «       t        k7  rt        j                  d«      ‚d| _         |t        t        «      d  }n
|t
        k(  ry t        || j                  «      S )Nz5binary copy doesn't start with the expected signatureT)r’   r˜   Ú_binary_signaturer*   Ú	DataErrorÚ_binary_trailerÚparse_row_binaryrR   rz   s     r8   rd   zBinaryFormatter.parse_row  sq   € Ø×#Ò#ØÐ,”cÔ+Ó,Ð-Ô1BÒBÜ—k‘kØKóð ð $(ˆDÔ ØœÔ-Ó.Ð0Ð1‰Dà”_Ò$Øä  d×&6Ñ&6Ó7Ð7r:   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_bytes<  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õ%ó8óó
ó ÷&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¼   F  s~   € ð €{Ü‹kˆáØˆu‰ˆØˆ
à×Ñ˜s¤W I´°C³Ñ$8Ó9€GÛˆØ¨Q¨]Œx�|‰|œI qÔ)ÀÑ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Â   Z  s|   € ð €{Ü‹kˆàŒ:”c˜#“hÓÑ€CØ×Ñ˜s¤Y K´#°c³(Ñ$:Ó;€GÛˆØˆ=Ø”:œc !›fÓ%Ñ%ˆCØ�1‰H‰Cà”<Ñ‰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Ë   m  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Ö   v  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:   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›  ðñõ #ã 	Û 
Û ß #ß ?Õ ?å Ý Ý ß ;Ó ;Ý 'Ý Ý !áÝ(à
�.‰.×
Ñ
€Ø�N‰N×!Ñ!€	à	‡y�y‡~�~€Ø	�‰×	Ñ	€à
�-‰-×
Ñ
€Ø�=‰=×!Ñ!€ð
 €ð
 �k‘/€ð €
ð �|‰|˜xÑ'€ô}ˆw�~Ñ&ô }ô@!�ô !ô2)�Iô )ôXD�iô DðP BFðØ	ðØ'ðØ.>ðàóð* BFðØ	ðØ'ðØ.>ðàóó&!ó!ð  ˆ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 