Ë
    Eü´j"'  ã            
      óD  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZmZ ddd	œZej+                   ed
«      D � ci c]  } | dk7  sŒ	 e| «      d| d›�“Œ c} «        ej0                  dj3                  ej5                  «       D � cg c]  }  ej6                  | «      ‘Œ c} «      «      Z ej0                  d«      Z ej0                  d«      Zdd„Zdd„Z 	 	 	 	 dd„Z! G d„ d«      Z" G d„ d«      Z# G d„ dee
«      Z$yc c} w c c} w )é    )Ú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   — dd„}t         j                  ||«      }| › d|› d�j                  «       S )z;
    Encode a name/value pair within a multipart form.
    c                ó2   — t         | j                  d«         S )Nr   )Ú!_HTML5_FORM_ENCODING_REPLACEMENTSÚgroup)Úmatchs    úO/root/workspace/ytshorts/venv/lib/python3.12/site-packages/httpx2/_multipart.pyÚreplacerz$_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%      s8   € ó
Aô $×'Ñ'¨°%Ó8€EØˆV�2�e�W˜AÐ×%Ñ%Ó'Ð'r   c                ó@   — | rt        j                  | «      d   xs dS y)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                ó  — | r| j                  d«      sy d| v rp| j                  d«      D ]\  }|j                  «       j                  «       j                  d«      sŒ1|j                  «       t	        d«      d  j                  d«      c S  y )Ns   multipart/form-dataó   ;s	   boundary=ó   ")Ú
startswithÚsplitÚstripÚlowerÚlen)Úcontent_typeÚsections     r   Ú(get_multipart_boundary_from_content_typer5   6   s„   € ñ ˜|×6Ñ6Ð7MÔNØð ˆ|ÑØ#×)Ñ)¨$Ó/ò 	HˆGØ�}‰}‹×$Ñ$Ó&×1Ñ1°,Õ?Ø—}‘}“¤s¨<Ó'8Ð':Ð;×AÑAÀ$ÓGÒGð	Hð r   c                  ó8   — e Zd ZdZdd„Zd	d„Zd	d„Zd
d„Zdd„Zy)Ú	DataFieldzB
    A single form field item, within a multipart form field.
    c                ó.  — t        |t        «      st        dt        |«      › d|›�«      ‚|�:t        |t        t        t
        t        f«      st        dt        |«      › d|›�«      ‚|| _        t        |t        «      r|| _	        y t        |«      | _	        y )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__zDataField.__init__I   sŒ   € Ü˜$¤Ô$ÜÐGÌÈTË
À|ÐSUÐVZÐU]Ð^Ó_Ð_ØÐ¤Z°¼¼UÄCÌÐ7OÔ%PÜÐSÔTXÐY^ÓT_ÐS`Ð`bÐchÐbkÐlÓmÐmØˆŒ	Ü+5°e¼UÔ+C %ˆ�
ÔI_Ð`eÓIfˆ�
r   c                ó�   — t        | d«      s/t        d| j                  «      }dj                  d|dg«      | _        | j                  S )NÚ_headersr#   r   ó    Content-Disposition: form-data; ó   

)Úhasattrr%   r#   ÚjoinrC   )r@   r#   s     r   Úrender_headerszDataField.render_headersQ   s?   € Ü�t˜ZÔ(Ü% f¨d¯i©iÓ8ˆDØŸH™HÐ&IÈ4ÐQ\Ð%]Ó^ˆDŒMà�}‰}Ðr   c                óf   — t        | d«      st        | j                  «      | _        | j                  S )NÚ_data)rF   r   r$   rJ   ©r@   s    r   Úrender_datazDataField.render_dataX   s&   € Ü�t˜WÔ%Ü! $§*¡*Ó-ˆDŒJà�z‰zÐr   c                óp   — | j                  «       }| j                  «       }t        |«      t        |«      z   S ©N)rH   rL   r2   )r@   ÚheadersÚdatas      r   Ú
get_lengthzDataField.get_length^   s1   € Ø×%Ñ%Ó'ˆØ×ÑÓ!ˆÜ�7‹|œc $›iÑ'Ð'r   c              #  óT   K  — | j                  «       –— | j                  «       –— y ­wrN   ©rH   rL   rK   s    r   ÚrenderzDataField.renderc   s$   è ø€ Ø×!Ñ!Ó#Ò#Ø×ÑÓ Ó ùs   ‚&(N)r#   r   r$   z str | bytes | int | float | Noner   ÚNone©r   r=   )r   r>   ©r   ztyping.Iterator[bytes])	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rA   rH   rL   rQ   rT   © r   r   r7   r7   D   s!   „ ñógóóó(ô
!r   r7   c                  ó<   — e Zd ZdZdZd	d„Zd
d„Zdd„Zdd„Zdd„Z	y)Ú	FileFieldzB
    A single file field item, within a multipart form field.
    i   c           	     ó   — || _         i }d }t        |t        «      r1t        |«      dk(  r|\  }}nHt        |«      dk(  r|\  }}}n3|\  }}}}n+t	        t        t        |dd«      «      «      j                   }|}|€t        |«      }t        d„ |D «       «      }|�|s||d<   t        |t        j                  «      rt        d«      ‚t        |t        j                  «      rt        d«      ‚|| _        || _        || _        y )	Né   é   r#   Úuploadc              3  ó@   K  — | ]  }d |j                  «       v –— Œ y­w)zcontent-typeN)r1   )Ú.0Úkeys     r   ú	<genexpr>z%FileField.__init__.<locals>.<genexpr>Œ   s   è ø€ Ò%WÈ n¸¿	¹	»Ô&CÑ%Wùó   ‚ú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:   Útupler2   r   r   Úgetattrr*   ÚanyÚioÚStringIOr;   Ú
TextIOBaser)   ÚfilerO   )r@   r#   r$   rO   r3   r)   ÚfileobjÚhas_content_type_headers           r   rA   z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ˆG�NÑ#ä�gœrŸ{™{Ô+ÜÐ]Ó^Ð^Ü�gœrŸ}™}Ô-ÜÐbÓcÐcà ˆŒØˆŒ	Øˆ�r   c                ó  — | j                  «       }t        | j                  t        t        f«      r*t        |«      t        t        | j                  «      «      z   S t        | j                  «      }|€y t        |«      |z   S rN   )rH   r:   ro   r   r=   r2   r   r   )r@   rO   Úfile_lengths      r   rQ   zFileField.get_lengthœ   sg   € Ø×%Ñ%Ó'ˆä�d—i‘i¤#¤u Ô.Ü�w“<¤#¤h¨t¯y©yÓ&9Ó":Ñ:Ð:ä*¨4¯9©9Ó5ˆð ÐØä�7‹|˜kÑ)Ð)r   c                óN  — t        | d«      �sdt        d| j                  «      g}| j                  r)t        d| j                  «      }|j	                  d|g«       | j
                  j                  «       D ]|  \  }}t        j                  |«      €t        d«      ‚t        j                  |«      �t        d«      ‚d|› d	�j                  «       |j                  «       }}|j	                  ||g«       Œ~ |j                  d
«       dj                  |«      | _        | j                  S )NrC   rD   r#   r)   s   ; zInvalid multipart header name.z4Invalid control character in multipart header value.z
r9   rE   r   )rF   r%   r#   r)   ÚextendrO   ÚitemsÚ_HEADER_NAME_REÚ	fullmatchÚ
ValueErrorÚ _FORBIDDEN_HEADER_VALUE_CHARS_REÚsearchr"   ÚappendrG   rC   )r@   Úpartsr)   Úheader_nameÚheader_valuere   Úvals          r   rH   z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 3˜ZÕ(ð)ð �L‰L˜Ô%ØŸH™H U›OˆDŒMà�}‰}Ðr   c              #  óÌ  K  — t        | j                  t        t        f«      rt	        | j                  «      –— y t        | j                  d«      r	 | j                  j                  d«       | j                  j                  | j                  «      }|r6t	        |«      –— | j                  j                  | j                  «      }|rŒ5y y # t        j                  $ r Y Œsw xY w­w)NÚseekr   )r:   ro   r   r=   r   rF   r‚   rl   ÚUnsupportedOperationÚreadÚ
CHUNK_SIZE©r@   Úchunks     r   rL   z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ô øô	 ×*Ñ*ò Ùðüs1   ‚AC$ÁC Á-AC$Ã	C$ÃC!ÃC$Ã C!Ã!C$c              #  ód   K  — | j                  «       –— | j                  «       E d {  –—†  y 7 Œ­wrN   rS   rK   s    r   rT   zFileField.renderÐ   s'   è ø€ Ø×!Ñ!Ó#Ò#Ø×#Ñ#Ó%×%Ò%ús   ‚&0¨.©0N)r#   r   r$   r   r   rU   ©r   z
int | NonerV   rW   )
rX   rY   rZ   r[   r…   rA   rQ   rH   rL   rT   r\   r   r   r^   r^   h   s(   „ ñð €Jó+óZ*óó*4ô &r   r^   c                  óZ   — e Zd ZdZ	 d
	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
y)ÚMultipartStreamzC
    Request content as streaming multipart encoded form data.
    Nc                óì   — |€2t        j                  d«      j                  «       j                  d«      }|| _        d|j                  d«      › �| _        t        | j                  ||«      «      | _	        y )Né   Úasciizmultipart/form-data; boundary=)
ÚosÚurandomÚhexr"   ÚboundaryÚdecoder3   ÚlistÚ_iter_fieldsÚfields)r@   rP   Úfilesr’   s       r   rA   zMultipartStream.__init__Ú   sd   € ð ÐÜ—z‘z "“~×)Ñ)Ó+×2Ñ2°7Ó;ˆHà ˆŒØ<¸X¿_¹_ÈWÓ=UÐ<VÐWˆÔÜ˜4×,Ñ,¨T°5Ó9Ó:ˆ�r   c              #  ó>  K  — |j                  «       D ]A  \  }}t        |t        t        f«      r|D ]  }t	        ||¬«      –— Œ Œ3t	        ||¬«      –— ŒC t        |t
        j                  «      r|j                  «       n|}|D ]  \  }}t        ||¬«      –— Œ y ­w)N)r#   r$   )rv   r:   ri   r”   r7   ÚtypingÚMappingr^   )r@   rP   r—   r#   r$   ÚitemÚ
file_itemss          r   r•   zMultipartStream._iter_fieldsç   s”   è ø€ ØŸ:™:›<ò 	8‰KˆD�%Ü˜%¤%¬ Ô/Ø!ò ;�DÜ#¨°TÔ:Ó:ñ;ô   T°Ô7Ó7ð	8ô '1°¼¿¹Ô&G�U—[‘[”]ÈUˆ
Ø%ò 	4‰KˆD�%Ü ¨UÔ3Ó3ñ	4ùs   ‚BBc              #  ó®   K  — | j                   D ]/  }d| j                  z  –— |j                  «       E d {  –—†  d–— Œ1 d| j                  z  –— y 7 Œ­w)Ns   --%s
s   
s   --%s--
)r–   r’   rT   )r@   Úfields     r   Úiter_chunkszMultipartStream.iter_chunksó   sR   è ø€ Ø—[‘[ò 	ˆEØ §¡Ñ-Ò-Ø—|‘|“~×%Ð%Ø‹Mð	ð ˜dŸm™mÑ+Ó+ð &ús   ‚4A¶A·Ac                ó¾   — t        | j                  «      }d}| j                  D ]+  }|j                  «       }|€ y|d|z   dz   z  }||z  }|dz  }Œ- |d|z   dz   z  }|S )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   Nr`   é   )r2   r’   r–   rQ   )r@   Úboundary_lengthÚlengthrž   Úfield_lengths        r   Úget_content_lengthz"MultipartStream.get_content_lengthú   sƒ   € ô
 ˜dŸm™mÓ,ˆØˆà—[‘[ò 	ˆEØ ×+Ñ+Ó-ˆLØÐ#Ùà�a˜/Ñ)¨AÑ-Ñ-ˆFØ�lÑ"ˆFØ�a‰K‰Fð	ð 	�!�oÑ%¨Ñ)Ñ)ˆØˆr   c                ód   — | j                  «       }| j                  }|€d|dœS t        |«      |dœS )NÚchunked)zTransfer-Encodingrh   )zContent-Lengthrh   )r¥   r3   r   )r@   Úcontent_lengthr3   s      r   Úget_headerszMultipartStream.get_headers  s<   € Ø×0Ñ0Ó2ˆØ×(Ñ(ˆØÐ!Ø)2ÀLÑQÐQÜ"% nÓ"5À|ÑTÐTr   c              #  ó@   K  — | j                  «       E d {  –—†  y 7 Œ­wrN   ©rŸ   rK   s    r   Ú__iter__zMultipartStream.__iter__  s   è ø€ Ø×#Ñ#Ó%×%Ò%ús   ‚–—c               ó@   K  — | j                  «       D ]  }|­–— Œ	 y ­wrN   r«   r†   s     r   Ú	__aiter__zMultipartStream.__aiter__  s#   è ø€ Ø×%Ñ%Ó'ò 	ˆEØŒKñ	ùrg   rN   )rP   r	   r—   r
   r’   úbytes | Noner   rU   )rP   r	   r—   r
   r   z&typing.Iterator[FileField | DataField]rW   r‰   )r   zdict[str, str])r   ztyping.AsyncIterator[bytes])rX   rY   rZ   r[   rA   r•   rŸ   r¥   r©   r¬   r®   r\   r   r   r‹   r‹   Õ   sV   „ ñð "&ð	;àð;ð ð;ð ð	;ð
 
ó;ó
4ó,óó,Uó&ôr   r‹   )r#   r   r$   r   r   r=   )r)   ú
str | Noner   r°   )r3   r¯   r   r¯   )%Ú
__future__r   rl   r'   r�   Úrer™   Úpathlibr   Ú_typesr   r   r   r	   r
   r   Ú_utilsr   r   r   r   ÚupdateÚrangeÚchrÚcompilerG   ÚkeysÚescaper    rw   rz   r%   r*   r5   r7   r^   r‹   )Úcs   0r   ú<module>r½      s  ðÝ "ã 	Û Û 	Û 	Û Ý ÷÷ ÷ñ ð +0°vÑ$>Ð !Ø !× (Ñ (ÁuÈXÃÖ)dÀ!ÐZ[Ð_cÓZc©#¨a«&°A°a¸°W°+Ñ*=Ò)dÔ eØ$˜"Ÿ*™* T§Y¡YÐFg×FlÑFlÓFnÖ/oÀ°	°·	±	¸!µÒ/oÓ%pÓqÐ Ø�"—*‘*Ð<Ó=€Ø#- 2§:¡:Ð.IÓ#JÐ  ó	(óðØðàó÷!!ñ !!÷Hj&ñ j&ôZG�n oõ Gùòy *eùÚ/os   Á
DÁ DÂD