
    Ng"                        d dl m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mZmZ dd
Z G d d          Z G d d          Z G d dee          ZdS )    )annotationsN)Path   )AsyncByteStreamFileContent	FileTypesRequestDataRequestFilesSyncByteStream)format_form_paramguess_content_typepeek_filelike_lengthprimitive_value_to_strto_bytescontent_typebytes | Nonereturnc                ^   | r|                      d          sd S d| v r|                     d          D ]y}|                                                                                     d          r>|                                t	          d          d                              d          c S zd S )Ns   multipart/form-data   ;s	   boundary=   ")
startswithsplitstriplowerlen)r   sections     L/var/www/html/ai-engine/env/lib/python3.11/site-packages/httpx/_multipart.py(get_multipart_boundary_from_content_typer      s      |667MNN t |#))$// 	H 	HG}}$$&&11,?? H}}s<'8'8':':;AA$GGGGGH4    c                  :    e Zd ZdZddZdd
ZddZddZddZdS )	DataFieldzB
    A single form field item, within a multipart form field.
    namestrvalue str | bytes | int | float | Noner   Nonec                p   t          |t                    s"t          dt          |           d|          |Jt          |t          t          t
          t          f          s"t          dt          |           d|          || _        t          |t                    r|nt          |          | _	        d S )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__,   s    $$$ 	RDJJRR$RR   ZUC7O%P%P1U1 1',1 1   	u--PEE3I%3P3P 	


r   r,   c                    t          | d          s2t          d| j                  }d                    d|dg          | _        | j        S )N_headersr"   r       Content-Disposition: form-data;    

)hasattrr   r"   joinr2   )r/   r"   s     r   render_headerszDataField.render_headers;   sN    tZ(( 	$VTY77DHH4dKH DM }r   c                b    t          | d          st          | j                  | _        | j        S )N_data)r5   r   r$   r9   r/   s    r   render_datazDataField.render_dataD   s-    tW%% 	.!$*--DJzr   r-   c                    |                                  }|                                 }t          |          t          |          z   S N)r7   r;   r   )r/   headersdatas      r   
get_lengthzDataField.get_lengthJ   s;    %%''!!7||c$ii''r   typing.Iterator[bytes]c              #  b   K   |                                  V  |                                 V  d S r=   r7   r;   r:   s    r   renderzDataField.renderO   s<      !!#####       r   N)r"   r#   r$   r%   r   r&   r   r,   )r   r-   r   rA   )	__name__
__module____qualname____doc__r0   r7   r;   r@   rD    r   r   r!   r!   '   s         
 
 
 
      ( ( ( (
! ! ! ! ! !r   r!   c                  >    e Zd ZdZdZdd	ZddZddZddZddZ	dS )	FileFieldzB
    A single file field item, within a multipart form field.
    i   r"   r#   r$   r   r   r&   c           	     T   || _         i }d }t          |t                    r;t          |          dk    r|\  }}nTt          |          dk    r|\  }}}n:|\  }}}}n2t	          t          t          |dd                              j         }|}|t          |          }t          d |D                       }||s||d<   t          |t          j
                  rt          d          t          |t          j                  rt          d          || _        || _        || _        d S )	N      r"   uploadc              3  B   K   | ]}d |                                 v V  dS )zcontent-typeN)r   ).0keys     r   	<genexpr>z%FileField.__init__.<locals>.<genexpr>x   s/      %W%Wn		&C%W%W%W%W%W%Wr   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)   tupler   r   r#   getattrr   anyioStringIOr*   
TextIOBasefilenamefiler>   )r/   r"   r$   r>   r   r]   fileobjhas_content_type_headers           r   r0   zFileField.__init__[   sV   	 #%#' eU## 	5zzQ %*!''Uq27/'<< <A8'<Cvx @ @AABBGHG-h77L"%%W%Ww%W%W%W"W"W#,C# '3GN#gr{++ 	Q   gr}-- 	V   !	r   
int | Nonec                "   |                                  }t          | j        t          t          f          r1t          |          t          t          | j                            z   S t          | j                  }|d S t          |          |z   S r=   )r7   r)   r^   r#   r,   r   r   r   )r/   r>   file_lengths      r   r@   zFileField.get_length   s{    %%''di#u.. 	;w<<#hty&9&9":":::*4955 47||k))r   r,   c                   t          | d          sdt          d| j                  g}| j        r,t          d| j                  }|                    d|g           | j                                        D ]H\  }}d| d                                |                                }}|                    ||g           I|                    d           d		                    |          | _
        | j
        S )
Nr2   r3   r"   r]   s   ; z
r(   r4   r   )r5   r   r"   r]   extendr>   itemsencodeappendr6   r2   )r/   partsr]   header_nameheader_valuerT   vals          r   r7   zFileField.render_headers   s    tZ(( 	,3!&$)44E } 0,ZGGeX.///-1\-?-?-A-A ) ))\1+11188::L<O<O<Q<QSc3Z((((LL%%%HHUOODM}r   rA   c              #    K   t          | j        t          t          f          rt	          | j                  V  d S t          | j        d          r1	 | j                            d           n# t          j        $ r Y nw xY w| j        	                    | j
                  }|r4t	          |          V  | j        	                    | j
                  }|2d S d S )Nseekr   )r)   r^   r#   r,   r   r5   rn   rZ   UnsupportedOperationread
CHUNK_SIZEr/   chunks     r   r;   zFileField.render_data   s      di#u.. 	49%%%%%F49f%% 		q!!!!*    	t// 	45//!!!INN4?33E  	4 	4 	4 	4 	4s   A- -A?>A?c              #  j   K   |                                  V  |                                 E d {V  d S r=   rC   r:   s    r   rD   zFileField.render   sH      !!#######%%%%%%%%%%%r   N)r"   r#   r$   r   r   r&   r   ra   rE   rF   )
rG   rH   rI   rJ   rq   r0   r@   r7   r;   rD   rK   r   r   rM   rM   T   s          J/ / / /b* * * *   "4 4 4 4 & & & & & &r   rM   c                  N    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
dS )MultipartStreamzC
    Request content as streaming multipart encoded form data.
    Nr?   r	   filesr
   boundaryr   r   r&   c                   |9t          j        d                                                              d          }|| _        d|                    d          z  | _        t          |                     ||                    | _	        d S )N   asciiz multipart/form-data; boundary=%s)
osurandomhexrg   ry   decoder   list_iter_fieldsfields)r/   r?   rx   ry   s       r   r0   zMultipartStream.__init__   s     z"~~))++227;;H >B
 B
 
 4,,T599::r   &typing.Iterator[FileField | DataField]c              #  d  K   |                                 D ]M\  }}t          |t          t          f          r|D ]}t	          ||          V  :t	          ||          V  Nt          |t
          j                  r|                                 n|}|D ]\  }}t          ||          V  d S )N)r"   r$   )rf   r)   rW   r   r!   typingMappingrM   )r/   r?   rx   r"   r$   item
file_itemss          r   r   zMultipartStream._iter_fields   s        ::<< 	8 	8KD%%%// 8! ; ;D#T:::::::;  T7777777&0&G&GRU[[]]]U
% 	4 	4KD%U3333333	4 	4r   rA   c              #     K   | j         D ],}d| j        z  V  |                                E d {V  dV  -d| j        z  V  d S )Ns   --%s
s   
s   --%s--
)r   ry   rD   )r/   fields     r   iter_chunkszMultipartStream.iter_chunks   sn      [ 	 	E----||~~%%%%%%%MMMMdm++++++r   ra   c                    t          | j                  }d}| j        D ]0}|                                }| dS |d|z   dz   z  }||z  }|dz  }1|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   NrO      )r   ry   r   r@   )r/   boundary_lengthlengthr   field_lengths        r   get_content_lengthz"MultipartStream.get_content_length   s    
 dm,,[ 	 	E ++--L#tta/)A--Fl"FaKFF!o%))r   dict[str, str]c                j    |                                  }| j        }|d|dS t          |          |dS )Nchunked)zTransfer-EncodingrV   )zContent-LengthrV   )r   r   r#   )r/   content_lengthr   s      r   get_headerszMultipartStream.get_headers   sE    0022(!)2LQQQ"%n"5"5|TTTr   c              #  @   K   |                                  D ]}|V  d S r=   r   rr   s     r   __iter__zMultipartStream.__iter__  s6      %%'' 	 	EKKKK	 	r   typing.AsyncIterator[bytes]c               B   K   |                                  D ]}|W V  d S r=   r   rr   s     r   	__aiter__zMultipartStream.__aiter__  s8      %%'' 	 	EKKKKK	 	r   r=   )r?   r	   rx   r
   ry   r   r   r&   )r?   r	   rx   r
   r   r   rF   ru   )r   r   )r   r   )rG   rH   rI   rJ   r0   r   r   r   r   r   r   rK   r   r   rw   rw      s          "&	; ; ; ; ;4 4 4 4, , , ,   ,U U U U        r   rw   )r   r   r   r   )
__future__r   rZ   r}   r   pathlibr   _typesr   r   r   r	   r
   r   _utilsr   r   r   r   r   r   r!   rM   rw   rK   r   r   <module>r      s   " " " " " " 				 				                                      *! *! *! *! *! *! *! *!Zj& j& j& j& j& j& j& j&ZL L L L Lno L L L L Lr   