
    3Cfy                         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ee   dede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.
    Nfieldsquote_fieldscharsetreturnc                 "   t        j                  d      | _        g | _        d| _        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   s       P/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/formdata.py__init__zFormData.__init__   sy     !00="$"")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 }|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.r0   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%   r0   r1   r-   r.   r/   msgtype_optionsheaderss	            r&   	add_fieldzFormData.add_field,   sp    eRYY'!%Dy*=>Y  $=$Ec#56'0&$'@
8S(AAHL  
5")) <%eT2H'/L$!%D#lC0ILX  *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   r3   r4   r   rB   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 )Nr0   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%   datar@   _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MPWWL##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-   rA   rP   )rA   rP   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   rA   popallCONTENT_LENGTHr   append_payload)r%   
dispparamsrA   r1   partexcs         r&   _gen_form_datazFormData._gen_form_data   sA   EFF*.,, 	.&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   rb   rU   r+   s    r&   __call__zFormData.__call__   s)    &&((,,..r(   ) TN)__name__
__module____qualname____doc__r   r   boolr   r;   r'   propertyr,   rB   r$   r   rQ   rU   r   r   rb   r   rd   re   r(   r&   r   r      s     !#!!%	!! ! #	!
 
!& "d " " '+"&375<5< 5<
 sm5< 3-5< $,C=5< 
5<n# $ 0
g&:&: 
$#	 9 9 #J/' /r(   r   )r3   r8   typingr   r   r   r   urllib.parser   	multidictr   r	    r   r   r   helpersr   r   __all__r   re   r(   r&   <module>rr      s4    	  0 0 " / & & # 
g/ g/r(   