o
    Rhy                     @   s   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 dZdS )    N)AnyIterableListOptional)	urlencode)	MultiDictMultiDictProxy   )hdrs	multipartpayload)guess_filename)Payload)FormDatac                   @   s   e Zd ZdZ			ddee dedee ddfd	d
Z	e
defddZdddddededee dee dee ddfddZdeddfddZdejfddZdejfddZdefd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                 C   sd   t 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   r   r   R/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/aiohttp/formdata.py__init__   s   
zFormData.__init__c                 C   s   | j S N)r   r#   r   r   r$   is_multipart(   s   zFormData.is_multipart)content_typefilenamecontent_transfer_encodingnamevaluer)   r*   r+   c          	      C   s"  t |tjr
d| _nt |tttfr$d}|d u r$|d u r$t|t	 |}t
d|i}|d ur9t |ts9td| |d u rHt |tjrHt||}|d urS||d< d| _i }|d urlt |tsdtd| ||tj< d| _|d urt |ts{td| d}t|t	 d| _| j|||f d S )	NTzIn v4, passing bytes will no longer create a file field. Please explicitly use the filename parameter or pass a BytesIO object.r,   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#   r,   r-   r)   r*   r+   msgtype_optionsheadersr   r   r$   	add_field,   sL   




zFormData.add_fieldc                 G   s   t |}|rO|d}t|tjrt|d}| || n.t|ttfr,|	|
  nt|t tfrDt|dkrD|\}}| || ntd||s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   r.   r/   r   r=   r   r   extendr    r!   lenr7   format)r#   r   to_addreckfpr   r   r$   r"   c   s    

zFormData.add_fieldsc                 C   sn   g }| j D ]\}}}||d |f q| jd ur| jnd}|dkr%d}nd| }tjt|d|d |dS )Nr,   zutf-8z!application/x-www-form-urlencodedz-application/x-www-form-urlencoded; charset=%sT)doseqencoding)r)   )r   r9   r   r   BytesPayloadr   encode)r#   datar;   _r-   r   r)   r   r   r$   _gen_form_urlencoded{   s   zFormData._gen_form_urlencodedc                 C   s   | j rtd| jD ]_\}}}ztj|v r#tj||tj || jd}n	tj||| jd}W n tyE } zt	dt
|||f |d}~ww |rc|j	d	d| ji| |jdus[J |jtjd | j| q
d| _ | jS )
zAEncode a list of fields using the multipart/form-data MIME formatz$Form data has been processed already)r)   r<   rI   )r<   rI   z8Can not serialize value type: %r
 headers: %r
 value: %rNr   r   T)r   )r   RuntimeErrorr   r
   r8   r   get_payloadr   	Exceptionr7   typeset_content_dispositionr   r<   popallCONTENT_LENGTHr   append_payload)r#   
dispparamsr<   r-   partexcr   r   r$   _gen_form_data   sL   
zFormData._gen_form_datac                 C   s   | j r|  S |  S r&   )r   rZ   rN   r'   r   r   r$   __call__   s   zFormData.__call__)r   TN)__name__
__module____qualname____doc__r   r   boolr   r6   r%   propertyr(   r=   r"   r   rJ   rN   r   r   rZ   r   r[   r   r   r   r$   r      sH    

7%r   )r.   r3   typingr   r   r   r   urllib.parser   	multidictr   r    r
   r   r   helpersr   r   __all__r   r   r   r   r$   <module>   s    