
    }i                         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 | _        || _        || _        || _        t        |t              rt        |j                               }nt        |t        t        f      s|f} | j                  |  y )N	form-data)r   MultipartWriter_writer_fields_is_multipart_quote_fields_charset
isinstancedictlistitemstuple
add_fields)selfr   r   r   r   s        C/var/www/files/kim/lib/python3.12/site-packages/aiohttp/formdata.py__init__zFormData.__init__   sq     !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.   r/   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 }|Kt        |t              st        d|z        d|v sd|v rt        d	      ||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.r0   z,filename must be an instance of str. Got: %sr.   z0content_type must be an instance of str. Got: %s
zRNewline or carriage return detected in headers. Potential header injection attack.z=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   
ValueErrorr   CONTENT_TYPEr   append)	r%   r0   r1   r-   r.   r/   msgtype_optionsheaderss	            r&   	add_fieldzFormData.add_field-   s    eRYY'!%Dy*=>Y  $=$Ec#56'0&$'@
8S(AJXUVV
5")) <%eT2H'/L$!%D#lC0FU  |#t|'; 9  *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   r5   r6   r   rE   r	   r   extendr"   r#   lenr>   format)r%   r   to_addreckfps         r&   r$   zFormData.add_fieldsg   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 )Nr0   zutf-8z!application/x-www-form-urlencodedz-application/x-www-form-urlencoded; charset=%sT)doseqencoding)r-   )r   rA   r   r   BytesPayloadr   encode)r%   datarC   _r1   r   r-   s          r&   _gen_form_urlencodedzFormData._gen_form_urlencoded   s    &*ll 	7"L!UKKf-u56	7 $(==#<$--'g>LJWTL##d$9@@B%
 	
r(   c           
         | 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                  |        | j                   j!                          | 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 format)r-   rD   rS   )rD   rS   zCan not serialize value type: z
 headers: z	
 value: Nr   )r   )r   r   r@   r   get_payloadr   	Exceptionr>   typeset_content_dispositionr   rD   popallCONTENT_LENGTHr   append_payloadclear)r%   
dispparamsrD   r1   partexcs         r&   _gen_form_datazFormData._gen_form_data   s4   *.,, 	.&J$$/"..%,T->->%? '!%	D #..wD ,,,.2.@.@DN
 ||///##D$7$7>LL''-9	.< 	||%  15eguN s   A)D	E#EEc                 Z    | j                   r| j                         S | j                         S r*   )r   re   rX   r+   s    r&   __call__zFormData.__call__   s)    &&((,,..r(   ) TN)__name__
__module____qualname____doc__r   r   boolr   r=   r'   propertyr,   rE   r$   r   rT   rX   r   r   re   r   rg   rh   r(   r&   r   r      s    !#!!%	! &+!! ! #	! #! 
!( "d " " '+"&378<8< 8<
 sm8< 3-8< $,C=8< 
8<t# $ 0
g&:&: 
$!	 9 9 !F/' /r(   r   )r5   r:   typingr   r   r   r   urllib.parser   	multidictr   r	    r   r   r   helpersr   r   __all__r   rh   r(   r&   <module>ru      s4    	  0 0 " / & & # 
i/ i/r(   