
    ,hs&              
         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j1                  |       " c}         ej2                  dj5                  ej7                         D  cg c]  }  ej8                  |        c}             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\\)"\       z%{:02X}|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    R/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/httpx/_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 $''%8EV2eWA%%''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N4N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_typer3   8   s     |667M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__K   s    $$;DJ<r$R  ZUC7O%PU}Bui1  	u-E 	
3I%3P 	
r   c                    t        | d      s/t        d| j                        }dj                  d|dg      | _        | j                  S )N_headersr!   r       Content-Disposition: form-data;    

)hasattrr#   r!   joinrA   )r>   r!   s     r   render_headerszDataField.render_headersZ   sB    tZ(%fdii8DHH4dKHDM }}r   c                f    t        | d      st        | j                        | _        | j                  S )N_data)rD   r   r"   rH   r>   s    r   render_datazDataField.render_datac   s&    tW%!$**-DJzzr   c                p    | j                         }| j                         }t        |      t        |      z   S N)rF   rJ   r0   )r>   headersdatas      r   
get_lengthzDataField.get_lengthi   s1    %%'!7|c$i''r   c              #  T   K   | j                          | j                          y wrL   rF   rJ   rI   s    r   renderzDataField.rendern   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__r?   rF   rJ   rO   rR    r   r   r5   r5   F   s     
(
!r   r5   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)r/   ).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!   r8   tupler0   r   r   getattrr(   anyioStringIOr9   
TextIOBaser'   filerM   )r>   r!   r"   rM   r1   r'   fileobjhas_content_type_headers           r   r?   zFileField.__init__z   s   	 #%#' eU#5zQ %*!'Uq27/'< <A8'<Cvx @ABGGHG.x8L"%%Ww%W"W#,C '3GN#gr{{+Q  gr}}-V  !	r   c                   | j                         }t        | j                  t        t        f      r*t        |      t        t        | j                              z   S t        | j                        }|y t        |      |z   S rL   )rF   r8   rm   r   r;   r0   r   r   )r>   rM   file_lengths      r   rO   zFileField.get_length   sg    %%'dii#u.w<#htyy&9":::*4995 7|k))r   c                   t        | d      sdt        d| j                        g}| j                  r)t        d| j                        }|j	                  d|g       | j
                  j                         D ]<  \  }}d| dj                         |j                         }}|j	                  ||g       > |j                  d       d	j                  |      | _
        | j                  S )
NrA   rB   r!   r'   s   ; z
r7   rC   r   )rD   r#   r!   r'   extendrM   itemsr    appendrE   rA   )r>   partsr'   header_nameheader_valuerc   vals          r   rF   zFileField.render_headers   s    tZ(3"64995E }}-j$--HeX./-1\\-?-?-A ))\!+b188:L<O<O<QSc3Z() LL%HHUODM}}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   )r8   rm   r   r;   r   rD   r{   rj   UnsupportedOperationread
CHUNK_SIZEr>   chunks     r   rJ   zFileField.render_data   s     dii#u.499%%499f%		q! 		t/5/!IINN4??3E 	 ** s1   AC$C -AC$	C$C!C$ C!!C$c              #  d   K   | j                          | j                         E d {    y 7 wrL   rQ   rI   s    r   rR   zFileField.render   s'     !!####%%%s   &0.0N)r!   r   r"   r   r   rS   r   z
int | NonerT   rU   )
rV   rW   rX   rY   r~   r?   rO   rF   rJ   rR   rZ   r   r   r\   r\   s   s(     J/b*"4 &r   r\   c                  f    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      z  | _        t        | j                  ||            | _	        y )N   asciiz multipart/form-data; boundary=%s)
osurandomhexr    boundarydecoder1   list_iter_fieldsfields)r>   rN   filesr   s       r   r?   zMultipartStream.__init__   si     zz"~))+227;H >B
 
 4,,T5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"   )rt   r8   rg   r   r5   typingMappingr\   )r>   rN   r   r!   r"   item
file_itemss          r   r   zMultipartStream._iter_fields   s       ::< 	8KD%%%/! ;D#T::;  T77	8 '1&GU[[]U
% 	4KD%U33	4s   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   rR   )r>   fields     r   iter_chunkszMultipartStream.iter_chunks  sR     [[ 	E--||~%%M	 dmm++ &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^      )r0   r   r   rO   )r>   boundary_lengthlengthr   field_lengths        r   get_content_lengthz"MultipartStream.get_content_length	  s    
 dmm,[[ 	E ++-L#a/)A--Fl"FaKF	 	!o%))r   c                d    | j                         }| j                  }|d|dS t        |      |dS )Nchunked)zTransfer-Encodingrf   )zContent-Lengthrf   )r   r1   r   )r>   content_lengthr1   s      r   get_headerszMultipartStream.get_headers  s<    002((!)2LQQ"%n"5|TTr   c              #  >   K   | j                         D ]  }|  y wrL   r   r   s     r   __iter__zMultipartStream.__iter__&  s#     %%' 	EK	s   c               @   K   | j                         D ]  }| 	 y wrL   r   r   s     r   	__aiter__zMultipartStream.__aiter__*  s#     %%' 	EK	re   rL   )rN   r	   r   r
   r   bytes | Noner   rS   )rN   r	   r   r
   r   z&typing.Iterator[FileField | DataField]rU   r   )r   zdict[str, str])r   ztyping.AsyncIterator[bytes])rV   rW   rX   rY   r?   r   r   r   r   r   r   rZ   r   r   r   r      sn     "&	;; ; 	;
 
;44(44	/4,,Ur   r   )r!   r   r"   r   r   r;   )r'   
str | Noner   r   )r1   r   r   r   )$
__future__r   rj   r%   r   rer   pathlibr   _typesr   r   r   r	   r
   r   _utilsr   r   r   r   updaterangechrformatcompilerE   keysescaper   r#   r(   r3   r5   r\   r   )cs   0r   <module>r      s   " 	  	 	     +0v$> ! ! ( (*//GQQ$YSVYa  G %"**II%F%K%K%MNyryy|NO 
	(*! *!Zj& j&ZLno LM H Os   
C? C?*D