ó
    °"³j"'  ã            
      óV  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJr  SSK	J
r
JrJrJrJrJr  SSKJrJrJr  SSS	.r\R+                  \" S
5       V s0 s H  o S:w  d  M
  \" U 5      SU S 3_M     sn 5        \R0                  " SR3                  \R5                  5        V s/ s H  n \R7                  U 5      PM     sn 5      5      r\R0                  " S5      r\R0                  " S5      rSS jrSS jr     SS jr! " S S5      r" " S S5      r# " S S\\
5      r$gs  sn f s  sn f )é    )ÚannotationsN)ÚPathé   )ÚAsyncByteStreamÚFileContentÚ	FileTypesÚRequestDataÚRequestFilesÚSyncByteStream)Úpeek_filelike_lengthÚprimitive_value_to_strÚto_bytesz%22z\\)Ú"Ú\é    é   Ú%Ú02XÚ|z[!#$%&'*+\-.^_`|~0-9A-Za-z]+z[\x00-\x08\x0a-\x1f\x7f]c                ób   • SS jn[         R                  X!5      nU  SU S3R                  5       $ )z3
Encode a name/value pair within a multipart form.
c                ó2   • [         U R                  S5         $ )Nr   )Ú!_HTML5_FORM_ENCODING_REPLACEMENTSÚgroup)Úmatchs    ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/httpx2/_multipart.pyÚreplacerÚ$_format_form_param.<locals>.replacer$   s   € Ü0°·±¸Q³Ñ@Ð@ó    z="r   )r   ztyping.Match[str]ÚreturnÚstr)Ú_HTML5_FORM_ENCODING_REÚsubÚencode)ÚnameÚvaluer   s      r   Ú_format_form_paramr&      s6   € ô
Aô $×'Ñ'¨Ó8€EØˆV�2�e�W˜AÐ×%Ñ%Ó'Ð'r   c                óV   • U (       a"  [         R                  " U 5      S   =(       d    S$ g)z…
Guesses the mimetype based on a filename. Defaults to `application/octet-stream`.

Returns `None` if `filename` is `None` or empty.
r   zapplication/octet-streamN)Ú	mimetypesÚ
guess_type)Úfilenames    r   Ú_guess_content_typer+   +   s&   € ö Ü×#Ò# HÓ-¨aÑ0×NÐ4NÐNØr   c                ó:  • U (       a  U R                  S5      (       d  g SU ;   aw  U R                  S5       Hb  nUR                  5       R                  5       R                  S5      (       d  M7  UR                  5       [	        S5      S  R                  S5      s  $    g )Ns   multipart/form-dataó   ;s	   boundary=ó   ")Ú
startswithÚsplitÚstripÚlowerÚlen)Úcontent_typeÚsections     r   Ú(get_multipart_boundary_from_content_typer6   6   sƒ   € ö ˜|×6Ñ6Ð7M×NÑNØð ˆ|ÓØ#×)Ñ)¨$Ö/ˆGØ�}‰}‹×$Ñ$Ó&×1Ñ1°,×?Ó?Ø—}‘}“¤s¨<Ó'8Ð':Ð;×AÑAÀ$ÓGÒGñ 0ð r   c                  óJ   • \ rS rSrSrS
S jrSS jrSS jrSS jrSS jr	Sr
g	)Ú	DataFieldéD   z:
A single form field item, within a multipart form field.
c                óN  • [        U[        5      (       d  [        S[        U5       SU< 35      eUb@  [        U[        [        [
        [        45      (       d  [        S[        U5       SU< 35      eXl        [        U[        5      (       a  X l	        g [        U5      U l	        g )Nz)Invalid type for name. Expected str, got ú: z5Invalid type for value. Expected primitive type, got )
Ú
isinstancer    Ú	TypeErrorÚtypeÚbytesÚintÚfloatr$   r   r%   )Úselfr$   r%   s      r   Ú__init__ÚDataField.__init__I   s‘   € Ü˜$¤×$Ñ$ÜÐGÌÈTË
À|ÐSUÐVZÑU]Ð^Ó_Ð_ØÑ¤Z°¼¼UÄCÌÐ7O×%PÑ%PÜÐSÔTXÐY^ÓT_ÐS`Ð`bÐchÑbkÐlÓmÐmØŒ	Ü+5°e¼U×+CÑ+C %�
ÔI_Ð`eÓIfˆ�
r   c                óš   • [        U S5      (       d/  [        SU R                  5      nSR                  SUS/5      U l        U R                  $ )NÚ_headersr$   r   ó    Content-Disposition: form-data; ó   

)Úhasattrr&   r$   ÚjoinrF   )rB   r$   s     r   Úrender_headersÚDataField.render_headersQ   sB   € Ü�t˜Z×(Ñ(Ü% f¨d¯i©iÓ8ˆDØŸH™HÐ&IÈ4ÐQ\Ð%]Ó^ˆDŒMà�}‰}Ðr   c                óp   • [        U S5      (       d  [        U R                  5      U l        U R                  $ )NÚ_data)rI   r   r%   rN   ©rB   s    r   Úrender_dataÚDataField.render_dataX   s)   € Ü�t˜W×%Ñ%Ü! $§*¡*Ó-ˆDŒJà�z‰zÐr   c                óp   • U R                  5       nU R                  5       n[        U5      [        U5      -   $ ©N)rK   rP   r3   )rB   ÚheadersÚdatas      r   Ú
get_lengthÚDataField.get_length^   s1   € Ø×%Ñ%Ó'ˆØ×ÑÓ!ˆÜ�7‹|œc $›iÑ'Ð'r   c              #  óT   #   • U R                  5       v •  U R                  5       v •  g 7frS   ©rK   rP   rO   s    r   ÚrenderÚDataField.renderc   s#   é € Ø×!Ñ!Ó#Ò#Ø×ÑÓ Ó ùs   ‚&()rN   rF   r$   r%   N)r$   r    r%   z str | bytes | int | float | Noner   ÚNone©r   r?   )r   r@   ©r   ztyping.Iterator[bytes])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rC   rK   rP   rV   rZ   Ú__static_attributes__© r   r   r8   r8   D   s!   † ñôgôôô(÷
!r   r8   c                  óN   • \ rS rSrSrSrSS jrSS jrSS jrSS jr	SS jr
S	rg
)Ú	FileFieldéh   z:
A single file field item, within a multipart form field.
i   c           	     ó  • Xl         0 nS n[        U[        5      (       a/  [        U5      S:X  a  Uu  pVOF[        U5      S:X  a  Uu  pVnO1Uu  pVpCO+[	        [        [        USS5      5      5      R                   nUnUc  [        U5      n[        S U 5       5      nUb  U(       d  XCS'   [        U[        R                  5      (       a  [        S5      e[        U[        R                  5      (       a  [        S5      eXPl        X`l        X0l        g )	Né   é   r$   Úuploadc              3  óH   #   • U  H  nS UR                  5       ;   v •  M     g7f)zcontent-typeN)r2   )Ú.0Úkeys     r   Ú	<genexpr>Ú%FileField.__init__.<locals>.<genexpr>Œ   s   é € Ð%WÊwÈ n¸¿	¹	»Ö&CÊwùs   ‚ "úContent-Typez?Multipart file uploads require 'io.BytesIO', not 'io.StringIO'.zDMultipart file uploads must be opened in binary mode, not text mode.)r$   r<   Útupler3   r   r    Úgetattrr+   ÚanyÚioÚStringIOr=   Ú
TextIOBaser*   ÚfilerT   )rB   r$   r%   rT   r4   r*   ÚfileobjÚhas_content_type_headers           r   rC   ÚFileField.__init__o   sý   € ØŒ	ð #%ˆØ#'ˆô �eœU×#Ñ#Ü�5‹z˜Q‹ð %*Ñ!�˜'Ü�U“˜q“Ø27Ñ/�¡<ð <AÑ8� <°äœC¤¨¨v°xÓ @ÓAÓB×GÑGˆHØˆGàÑÜ.¨xÓ8ˆLä"%Ñ%WÉwÓ%WÓ"WÐØÑ#Ö,Cð '3�NÑ#ä�gœrŸ{™{×+Ñ+ÜÐ]Ó^Ð^Ü�gœrŸ}™}×-Ñ-ÜÐbÓcÐcà ŒØŒ	Ø�r   c                ó  • U R                  5       n[        U R                  [        [        45      (       a*  [        U5      [        [        U R                  5      5      -   $ [        U R                  5      nUc  g [        U5      U-   $ rS   )rK   r<   ry   r    r?   r3   r   r   )rB   rT   Úfile_lengths      r   rV   ÚFileField.get_lengthœ   sj   € Ø×%Ñ%Ó'ˆä�d—i‘i¤#¤u ×.Ñ.Ü�w“<¤#¤h¨t¯y©yÓ&9Ó":Ñ:Ð:ä*¨4¯9©9Ó5ˆð ÑØä�7‹|˜kÑ)Ð)r   c                ód  • [        U S5      (       Gd  S[        SU R                  5      /nU R                  (       a)  [        SU R                  5      nUR	                  SU/5        U R
                  R                  5        H|  u  p4[        R                  U5      c  [        S5      e[        R                  U5      b  [        S5      eSU S	3R                  5       UR                  5       peUR	                  XV/5        M~     UR                  S
5        SR                  U5      U l        U R                  $ )NrF   rG   r$   r*   s   ; zInvalid multipart header name.z4Invalid control character in multipart header value.z
r;   rH   r   )rI   r&   r$   r*   ÚextendrT   ÚitemsÚ_HEADER_NAME_REÚ	fullmatchÚ
ValueErrorÚ _FORBIDDEN_HEADER_VALUE_CHARS_REÚsearchr#   ÚappendrJ   rF   )rB   Úpartsr*   Úheader_nameÚheader_valuero   Úvals          r   rK   ÚFileField.render_headers«   sý   € Ü�t˜Z×(Ò(à3Ü" 6¨4¯9©9Ó5ðˆEð �}�}Ü-¨j¸$¿-¹-ÓH�Ø—‘˜e XÐ.Ô/Ø-1¯\©\×-?Ñ-?Ö-AÑ)�Ü"×,Ñ,¨[Ó9ÑAÜ$Ð%EÓFÐFÜ3×:Ñ:¸<ÓHÑTÜ$Ð%[Ó\Ð\Ø! + ¨bÐ1×8Ñ8Ó:¸L×<OÑ<OÓ<Q�SØ—‘˜c˜ZÖ(ñ .Bð �L‰L˜Ô%ØŸH™H U›OˆDŒMà�}‰}Ðr   c              #  óø  #   • [        U R                  [        [        45      (       a  [	        U R                  5      v •  g [        U R                  S5      (       a   U R                  R                  S5        U R                  R                  U R                  5      nU(       a<  [	        U5      v •  U R                  R                  U R                  5      nU(       a  M;  g g ! [        R                   a     Nf = f7f)NÚseekr   )r<   ry   r    r?   r   rI   r�   rv   ÚUnsupportedOperationÚreadÚ
CHUNK_SIZE©rB   Úchunks     r   rP   ÚFileField.render_dataÀ   s­   é € Ü�d—i‘i¤#¤u ×.Ñ.Ü˜4Ÿ9™9Ó%Ò%Øä�4—9‘9˜f×%Ñ%ðØ—	‘	—‘˜qÔ!ð —	‘	—‘˜tŸ™Ó/ˆÞÜ˜5“/Ò!Ø—I‘I—N‘N 4§?¡?Ó3ˆE÷ Šeøô	 ×*Ñ*ó Ùðüs1   ‚AC:ÁC  Á7A%C:ÃC:Ã C7Ã4C:Ã6C7Ã7C:c              #  ód   #   • U R                  5       v •  U R                  5        S h  v•N   g  N7frS   rY   rO   s    r   rZ   ÚFileField.renderÐ   s&   é € Ø×!Ñ!Ó#Ò#Ø×#Ñ#Ó%×%Ó%ùs   ‚&0¨.©0)rF   ry   r*   rT   r$   N)r$   r    r%   r   r   r\   ©r   z
int | Noner]   r^   )r_   r`   ra   rb   rc   r’   rC   rV   rK   rP   rZ   rd   re   r   r   rg   rg   h   s(   † ñð €Jô+ôZ*ôô*4÷ &r   rg   c                  ór   • \ rS rSrSr 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)ÚMultipartStreaméÕ   z;
Request content as streaming multipart encoded form data.
Nc                óì   • Uc3  [         R                  " S5      R                  5       R                  S5      nX0l        SUR                  S5       3U l        [        U R                  X5      5      U l	        g )Né   Úasciizmultipart/form-data; boundary=)
ÚosÚurandomÚhexr#   ÚboundaryÚdecoder4   ÚlistÚ_iter_fieldsÚfields)rB   rU   Úfilesr¢   s       r   rC   ÚMultipartStream.__init__Ú   s`   € ð ÑÜ—z’z "“~×)Ñ)Ó+×2Ñ2°7Ó;ˆHà ŒØ<¸X¿_¹_ÈWÓ=UÐ<VÐWˆÔÜ˜4×,Ñ,¨TÓ9Ó:ˆ�r   c              #  óD  #   • UR                  5        HA  u  p4[        U[        [        45      (       a  U H  n[	        X5S9v •  M     M6  [	        X4S9v •  MC     [        U[
        R                  5      (       a  UR                  5       OUnU H  u  p4[        X4S9v •  M     g 7f)N)r$   r%   )r‚   r<   rs   r¤   r8   ÚtypingÚMappingrg   )rB   rU   r§   r$   r%   ÚitemÚ
file_itemss          r   r¥   ÚMultipartStream._iter_fieldsç   s€   é € ØŸ:™:ž<‰KˆDÜ˜%¤%¬ ×/Ñ/Û!�DÜ#¨Ñ:Ô:ó "ô   TÑ7Ô7ñ (ô '1°¼¿¹×&GÑ&G�U—[‘[”]ÈUˆ
Û%‰KˆDÜ Ñ3Ô3ò &ùs   ‚BB c              #  ó²   #   • U R                    H0  nSU R                  -  v •  UR                  5        S h  v•N   Sv •  M2     SU R                  -  v •  g  N7f)Ns   --%s
s   
s   --%s--
)r¦   r¢   rZ   )rB   Úfields     r   Úiter_chunksÚMultipartStream.iter_chunksó   sL   é € Ø—[”[ˆEØ §¡Ñ-Ò-Ø—|‘|“~×%Ð%ØŒMñ !ð ˜dŸm™mÑ+Ó+ñ &ùs   ‚4A¶A·Ac                óÂ   • [        U R                  5      nSnU R                   H,  nUR                  5       nUc    gUSU-   S-   -  nX$-  nUS-  nM.     USU-   S-   -  nU$ )z„
Return the length of the multipart encoded content, or `None` if
any of the files have a length that cannot be determined upfront.
r   Nrj   é   )r3   r¢   r¦   rV   )rB   Úboundary_lengthÚlengthr°   Úfield_lengths        r   Úget_content_lengthÚ"MultipartStream.get_content_lengthú   s|   € ô
 ˜dŸm™mÓ,ˆØˆà—[”[ˆEØ ×+Ñ+Ó-ˆLØÑ#Ùà�a˜/Ñ)¨AÑ-Ñ-ˆFØÑ"ˆFØ�a‰KŠFñ !ð 	�!�oÑ%¨Ñ)Ñ)ˆØˆr   c                óf   • U R                  5       nU R                  nUc  SUS.$ [        U5      US.$ )NÚchunked)zTransfer-Encodingrr   )zContent-Lengthrr   )r¸   r4   r    )rB   Úcontent_lengthr4   s      r   Úget_headersÚMultipartStream.get_headers  s<   € Ø×0Ñ0Ó2ˆØ×(Ñ(ˆØÑ!Ø)2ÀLÑQÐQÜ"% nÓ"5À|ÑTÐTr   c              #  ó@   #   • U R                  5        S h  v•N   g  N7frS   ©r±   rO   s    r   Ú__iter__ÚMultipartStream.__iter__  s   é € Ø×#Ñ#Ó%×%Ó%ùs   ‚–—c               óD   #   • U R                  5        H  nU7v •  M
     g 7frS   rÀ   r“   s     r   Ú	__aiter__ÚMultipartStream.__aiter__  s   é € Ø×%Ñ%Ö'ˆEØ�Kò (ùs   ‚ )r¢   r4   r¦   rS   )rU   r	   r§   r
   r¢   úbytes | Noner   r\   )rU   r	   r§   r
   r   z&typing.Iterator[FileField | DataField]r^   r˜   )r   zdict[str, str])r   ztyping.AsyncIterator[bytes])r_   r`   ra   rb   rc   rC   r¥   r±   r¸   r½   rÁ   rÄ   rd   re   r   r   rš   rš   Õ   sV   † ñð "&ð	;àð;ð ð;ð ð	;ð
 
õ;ô
4ô,ôô,Uô&÷r   rš   )r$   r    r%   r    r   r?   )r*   ú
str | Noner   rÇ   )r4   rÆ   r   rÆ   )%Ú
__future__r   rv   r(   rŸ   Úrerª   Úpathlibr   Ú_typesr   r   r   r	   r
   r   Ú_utilsr   r   r   r   ÚupdateÚrangeÚchrÚcompilerJ   ÚkeysÚescaper!   rƒ   r†   r&   r+   r6   r8   rg   rš   )Úcs   0r   Ú<module>rÔ      s!  ðÝ "ã 	Û Û 	Û 	Û Ý ÷÷ ÷ñ ð +0°vÑ$>Ð !Ø !× (Ñ (ÁuÈXÄÓ)dÂÀ!Ð_cÑZcÓ*=©#¨a«&°A°a¸°W°+Ò*=ÁÑ)dÔ eØŸ*š* T§Y¡YÐFg×FlÑFlÔFnÓ/oÒFnÀ°·	±	¸!¶ÑFnÑ/oÓ%pÓqÐ Ø—*’*Ð<Ó=€Ø#%§:¢:Ð.IÓ#JÐ  ô	(ôðØðàô÷!!ñ !!÷Hj&ñ j&ôZG�n oõ Gùòy *eùÚ/os   Á	D!Á"D!Â#D&