
    g                         d dl Z d dlZd dlmZmZmZmZ d dlmZ d dl	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZ d	Z G d
 d      Zy)    N)AnyIterableListOptional)	urlencode)	MultiDictMultiDictProxy   )hdrs	multipartpayload)guess_filename)Payload)FormDatac                       e Zd ZdZ	 	 	 ddddee   dedee   ded	df
d
Z	e
d	efd       Zdddddededee   dee   dee   d	dfdZded	dfdZd	ej                  fdZd	ej$                  fdZd	efdZy)r   ztHelper class for form body generation.

    Supports multipart/form-data and application/x-www-form-urlencoded.
    NF)default_to_multipartfieldsquote_fieldscharsetr   returnc                "   t        j                  d      | _        g | _        || _        d| _        || _        || _        t        |t              rt        |j                               }nt        |t        t        f      s|f} | j                  |  y )N	form-dataF)r   MultipartWriter_writer_fields_is_multipart_is_processed_quote_fields_charset
isinstancedictlistitemstuple
add_fields)selfr   r   r   r   s        E/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/formdata.py__init__zFormData.__init__   sy     !00="$1")fd#&,,.)FFT5M2YF     c                     | j                   S N)r   r&   s    r'   is_multipartzFormData.is_multipart*   s    !!!r)   )content_typefilenamecontent_transfer_encodingnamevaluer.   r/   r0   c                   t        |t        j                        rd| _        n=t        |t        t
        t        f      r"d}||t        j                  |t               |}t        d|i      }|t        |t              st        d|z        |&t        |t        j                        rt        ||      }|||d<   d| _        i }|8t        |t              st        d|z        ||t        j                  <   d| _        |At        |t              st        d|z        d}t        j                  |t               d| _        | j                   j#                  |||f       y )	NTzIn v4, passing bytes will no longer create a file field. Please explicitly use the filename parameter or pass a BytesIO object.r1   z,filename must be an instance of str. Got: %sr/   z0content_type must be an instance of str. Got: %sz=content_transfer_encoding must be an instance of str. Got: %szfcontent_transfer_encoding is deprecated. To maintain compatibility with v4 please pass a BytesPayload.)r    ioIOBaser   bytes	bytearray
memoryviewwarningswarnDeprecationWarningr   str	TypeErrorr   r   CONTENT_TYPEr   append)	r&   r1   r2   r.   r/   r0   msgtype_optionsheaderss	            r'   	add_fieldzFormData.add_field.   sj    eRYY'!%Dy*=>Y  $=$Ec#56'0&$'@
8S(AJXUVV
5")) <%eT2H'/L$!%D#lC0FU  *6GD%%&!%D$07=')BC 
P  MM#12!%D\7E:;r)   c                    t        |      }|r|j                  d      }t        |t        j                        rt        |d      }| j                  ||       nt        |t        t        f      r |j                  |j                                nVt        |t         t        f      r&t        |      dk(  r|\  }}| j                  ||       nt        dj                  |            |ry y )Nr   unknown   zxOnly io.IOBase, multidict and (name, file) pairs allowed, use .add_field() for passing more complex parameters, got {!r})r"   popr    r4   r5   r   rC   r	   r   extendr#   r$   lenr=   format)r&   r   to_addreckfps         r'   r%   zFormData.add_fieldsc   s    f**Q-C#ryy)"3	2q#&C.)!<=ciik*C$/CHM2q"%  88>s  r)   c                    g }| j                   D ]  \  }}}|j                  |d   |f        | j                  | j                  nd}|dk(  rd}nd|z  }t        j                  t        |d|      j                         |      S )Nr1   zutf-8z!application/x-www-form-urlencodedz-application/x-www-form-urlencoded; charset=%sT)doseqencoding)r.   )r   r?   r   r   BytesPayloadr   encode)r&   datarA   _r2   r   r.   s          r'   _gen_form_urlencodedzFormData._gen_form_urlencoded{   s    &*ll"L!UKKf-u56 '3 $(==#<$--'g>LJWTL##d$9@@B%
 	
r)   c           
         | j                   rt        d      | j                  D ]  \  }}}	 t        j                  |v r5t        j                  ||t        j                     || j                        }n"t        j                  ||| j                        }|rW |j                  	 d
d| j                  i| |j                  J |j                  j                  t        j                  d       | j                   j#                  |        d	| _         | j                   S # t        $ r#}t        dt        |      d|d|      |d}~ww xY w)zAEncode a list of fields using the multipart/form-data MIME formatz$Form data has been processed already)r.   rB   rQ   )rB   rQ   zCan not serialize value type: z
 headers: z	
 value: Nr   T)r   )r   RuntimeErrorr   r   r>   r   get_payloadr   	Exceptionr=   typeset_content_dispositionr   rB   popallCONTENT_LENGTHr   append_payload)r&   
dispparamsrB   r2   partexcs         r'   _gen_form_datazFormData._gen_form_data   s<   EFF*.,,&J$$/"..%,T->->%? '!%	D #..wD ,,,.2.@.@DN
 ||///##D$7$7>LL''-9 +7< "||%  15eguN s   A)D	E
'EE
c                 Z    | j                   r| j                         S | j                         S r+   )r   rc   rV   r,   s    r'   __call__zFormData.__call__   s)    &&((,,..r)   ) TN)__name__
__module____qualname____doc__r   r   boolr   r<   r(   propertyr-   rC   r%   r   rR   rV   r   r   rc   r   re   rf   r)   r'   r   r      s    !#!!%	! &+!! ! #	! #! 
!* "d " " '+"&373<3< 3<
 sm3< 3-3< $,C=3< 
3<j# $ 0
g&:&: 
$#	 9 9 #J/' /r)   r   )r4   r9   typingr   r   r   r   urllib.parser   	multidictr   r	    r   r   r   helpersr   r   __all__r   rf   r)   r'   <module>rs      s4    	  0 0 " / & & # 
g/ g/r)   