
    hs&              
      $   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R1                  U 5      _M$     sn 5        \R2                  " SR5                  \R7                  5        V s/ s H  n \R9                  U 5      PM     sn 5      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\\)"\       z%{:02X}|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    B/var/www/html/env/lib/python3.13/site-packages/httpx/_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 $''8EV2eWA%%''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N4N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_typer4   8   s     |667M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	)	DataFieldF   z:
A single form field item, within a multipart form field.
c                P   [        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  UU 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__K   s    $$$;DJ<r$R  ZUC7O%P%PU}Bui1  	u--E 	
3I%3P 	
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"   joinrD   )r@   r"   s     r   render_headersDataField.render_headersZ   sE    tZ((%fdii8DHH4dKHDM }}r   c                p    [        U S5      (       d  [        U R                  5      U l        U R                  $ )N_data)rG   r   r#   rL   r@   s    r   render_dataDataField.render_datac   s)    tW%%!$**-DJzzr   c                p    U R                  5       nU R                  5       n[        U5      [        U5      -   $ N)rI   rN   r1   )r@   headersdatas      r   
get_lengthDataField.get_lengthi   s1    %%'!7|c$i''r   c              #  T   #    U R                  5       v   U R                  5       v   g 7frQ   rI   rN   rM   s    r   renderDataField.rendern   s#     !!##  s   &()rL   rD   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__rA   rI   rN   rT   rX   __static_attributes__ r   r   r6   r6   F   s     
(
!r   r6   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
)	FileFields   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)r0   ).0keys     r   	<genexpr>%FileField.__init__.<locals>.<genexpr>   s     %Wwn		&Cws    "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:   tupler1   r   r   getattrr)   anyioStringIOr;   
TextIOBaser(   filerR   )r@   r"   r#   rR   r2   r(   fileobjhas_content_type_headers           r   rA   FileField.__init__z   s	   	 #%#' eU##5zQ %*!'Uq27/< <A8<Cvx @ABGGHG.x8L"%%Ww%W"W#,C '3N#gr{{++Q  gr}}--V  !	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-   $ rQ   )rI   r:   rw   r   r=   r1   r   r   )r@   rR   file_lengths      r   rT   FileField.get_length   sj    %%'dii#u..w<#htyy&9":::*4995 7|k))r   c                   [        U S5      (       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  p4S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                  $ )
NrD   rE   r"   r(   s   ; z
r9   rF   r   )rG   r$   r"   r(   extendrR   itemsr!   appendrH   rD   )r@   partsr(   header_nameheader_valuerm   vals          r   rI   FileField.render_headers   s    tZ((3"64995E }}-j$--HeX./-1\\-?-?-A)!+b188:L<O<O<QScZ( .B LL%HHUODM}}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:   rw   r   r=   r   rG   r   rt   UnsupportedOperationread
CHUNK_SIZEr@   chunks     r   rN   FileField.render_data   s     dii#u..499%%499f%%		q! 		t/5/!IINN4??3E 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rQ   rW   rM   s    r   rX   FileField.render   s&     !!####%%%s   &0.0)rD   rw   r(   rR   r"   N)r"   r   r#   r   r   rZ   r   z
int | Noner[   r\   )r]   r^   r_   r`   ra   r   rA   rT   rI   rN   rX   rb   rc   r   r   re   re   s   s(     J/b*"4 &r   re   c                  ~    \ 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      -  U l        [        U R                  X5      5      U l	        g )N   asciiz multipart/form-data; boundary=%s)
osurandomhexr!   boundarydecoder2   list_iter_fieldsfields)r@   rS   filesr   s       r   rA   MultipartStream.__init__   se     zz"~))+227;H >B
 
 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:   rq   r   r6   typingMappingre   )r@   rS   r   r"   r#   item
file_itemss          r   r   MultipartStream._iter_fields   s       ::<KD%%//!D#:: "  T77 ( '1&G&GU[[]U
%KD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   rX   )r@   fields     r   iter_chunksMultipartStream.iter_chunks  sL     [[E--||~%%M ! dmm++ &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   Nrh      )r1   r   r   rT   )r@   boundary_lengthlengthr   field_lengths        r   get_content_length"MultipartStream.get_content_length	  s|    
 dmm,[[E ++-L#a/)A--F"FaKF ! 	!o%))r   c                f    U R                  5       nU R                  nUc  SUS.$ [        U5      US.$ )Nchunked)zTransfer-Encodingrp   )zContent-Lengthrp   )r   r2   r   )r@   content_lengthr2   s      r   get_headersMultipartStream.get_headers  s<    002((!)2LQQ"%n"5|TTr   c              #  B   #    U R                  5        H  nUv   M	     g 7frQ   r   r   s     r   __iter__MultipartStream.__iter__&  s     %%'EK (s   c               D   #    U R                  5        H  nU7v   M
     g 7frQ   r   r   s     r   	__aiter__MultipartStream.__aiter__*  s     %%'EK (s    )r   r2   r   rQ   )rS   r	   r   r
   r   bytes | Noner   rZ   )rS   r	   r   r
   r   z&typing.Iterator[FileField | DataField]r\   r   )r   zdict[str, str])r   ztyping.AsyncIterator[bytes])r]   r^   r_   r`   ra   rA   r   r   r   r   r   r   rb   rc   r   r   r   r      sn     "&	;; ; 	;
 
;44(44	/4,,Ur   r   )r"   r   r#   r   r   r=   )r(   
str | Noner   r   )r2   r   r   r   )$
__future__r   rt   r&   r   rer   pathlibr   _typesr   r   r   r	   r
   r   _utilsr   r   r   r   updaterangechrformatcompilerH   keysescaper   r$   r)   r4   r6   re   r   )cs   0r   <module>r      s   " 	  	 	     +0v$> ! ! ( (*//G/Q$Y SVYa  /G **II%F%K%K%MN%Mryy|%MNO 
	(*! *!Zj& j&ZLno LM H Os   	D"D.D