
    `e                         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dS )    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dS )r   ztHelper class for form body generation.

    Supports multipart/form-data and application/x-www-form-urlencoded.
     TNfieldsquote_fieldscharsetreturnc                 >   t          j        d          | _        g | _        d| _        d| _        || _        || _        t          |t                    r"t          |                                          }nt          |t          t          f          s|f} | j        |  d S )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       0lib/python3.11/site-packages/aiohttp/formdata.py__init__zFormData.__init__   s     !0=="$"")fd## 	&,,..))FFFT5M2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|||}t          d|i          }|'t          |t                    st          d|z            |*t          |t          j                  rt          ||          }|||d<   d| _        i }|=t          |t                    st          d|z            ||t          j        <   d| _        |=t          |t                    st          d|z            ||t          j        <   d| _        | j                            |||f           d S )NTr1   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: %s)r    ioIOBaser   bytes	bytearray
memoryviewr   str	TypeErrorr   r   CONTENT_TYPECONTENT_TRANSFER_ENCODINGr   append)r&   r1   r2   r.   r/   r0   type_optionsheaderss           r'   	add_fieldzFormData.add_field+   s    eRY'' 	 !%Dy*=>> 	 $=$E'0&$'@'@
8S(A(AAHL   
5") < <%eT22H'/L$!%D#lC00 ILX   *6GD%&!%D$07== ')BC   7PGD23!%D\7E:;;;;;r)   c                 B   t          |          }|r|                    d          }t          |t          j                  r't          |d          }|                     ||           nt          |t          t          f          r(|	                    |
                                           nmt          |t           t          f          r/t          |          dk    r|\  }}|                     ||           n"t          d                    |                    |
d S d S )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   r@   r	   r   extendr#   r$   lenr:   format)r&   r   to_addreckfps         r'   r%   zFormData.add_fieldsY   s   f 	**Q--C#ry)) "3	22q#&&&&C.)!<== ciikk****C$// 	CHHMM2q"%%%%  88>s    	 	 	 	 	r)   c                    g }| j         D ]#\  }}}|                    |d         |f           $| j        | j        nd}|dk    rd}nd|z  }t          j        t          |d|                                          |          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&   datar>   _r2   r   r.   s          r'   _gen_form_urlencodedzFormData._gen_form_urlencodedq   s    &*l 	7 	7"L!UKKf-u56666#'=#<$--'g>LLMPWWL#d$999@@BB%
 
 
 	
r)   c           
      H   | j         rt          d          | j        D ]\  }}}	 t          j        |v r.t          j        ||t          j                 || j                  }nt          j        ||| j                  }n8# t          $ r+}t          dt          |          d|d|          |d}~ww xY w|rC |j        	 dd	| j        i| |j        J |j                            t          j        d           | j                            |           d
| _         | j        S )zAEncode a list of fields using the multipart/form-data MIME formatz$Form data has been processed already)r.   r?   rN   )r?   rN   zCan not serialize value type: z
 headers: z	
 value: Nr   r   T)r   )r   RuntimeErrorr   r   r;   r   get_payloadr   	Exceptionr:   typeset_content_dispositionr   r?   popallCONTENT_LENGTHr   append_payload)r&   
dispparamsr?   r2   partexcs         r'   _gen_form_datazFormData._gen_form_data   s    	GEFFF*., 	. 	.&J$//".%,T->%? '!%	  DD #.w  D    i15eggguuN    ?,, .2.@DN  
 |///##D$7>>>L''----!|s   AA>>
B3&B..B3c                 `    | j         r|                                 S |                                 S r+   )r   r`   rS   r,   s    r'   __call__zFormData.__call__   s1     	/&&(((,,...r)   )r   TN)__name__
__module____qualname____doc__r   r   boolr   r9   r(   propertyr-   r@   r%   r   rO   rS   r   r   r`   r   rb   r   r)   r'   r   r      s         !#!!%	! !! ! #	!
 
! ! ! !& "d " " " X" '+"&37,< ,< ,<,< ,<
 sm,< 3-,< $,C=,< 
,< ,< ,< ,<\# $    0
g&: 
 
 
 
$#	 9 # # # #J/' / / / / / /r)   r   )r4   typingr   r   r   r   urllib.parser   	multidictr   r	    r   r   r   helpersr   r   __all__r   r   r)   r'   <module>ro      s    				 0 0 0 0 0 0 0 0 0 0 0 0 " " " " " " / / / / / / / / & & & & & & & & & & # # # # # #      
^/ ^/ ^/ ^/ ^/ ^/ ^/ ^/ ^/ ^/r)   