a
    `g                     @   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dee eee edddd	Z	e
ed
ddZddddeeee ee ee ddddZeddddZejd
ddZejd
ddZed
ddZdS )r   ztHelper class for form body generation.

    Supports multipart/form-data and application/x-www-form-urlencoded.
     TNF)default_to_multipart)fieldsquote_fieldscharsetr   returnc                C   sd   t d| _g | _|| _d| _|| _|| _t|t	rBt
| }nt|t
tfsV|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   ^/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/formdata.py__init__   s    
zFormData.__init__)r   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,   r   c          	      C   s$  t |tjrd| _n4t |tttfrHd}|d u rH|d u rHt|t	 |}t
d|i}|d urrt |tsrtd| |d u rt |tjrt||}|d ur||d< d| _i }|d urt |tstd| ||tj< d| _|d urt |tst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.   sH    





zFormData.add_field)r   r   c                 G   s   t |}|r|d}t|tjr:t|d}| || qt|ttfrX|	|
  qt|t tfrt|dkr|\}}| || qtd|q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/   r0   r   r>   r   r   extendr!   r"   lenr8   format)r$   r   Zto_addZreckfpr   r   r%   r#   c   s     

zFormData.add_fieldsc                 C   sn   g }| j D ]\}}}||d |f q
| jd ur8| jnd}|dkrJd}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   r:   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 rFtj||tj || jd}ntj||| jd}W n< ty } z$t	dt
|||f |W Y d}~n
d}~0 0 |r|jd	d| ji| |jdusJ |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=   rH   )r=   rH   z8Can not serialize value type: %r
 headers: %r
 value: %rNr   r   T)r   )r   RuntimeErrorr   r
   r9   r   get_payloadr   	Exceptionr8   typeZset_content_dispositionr   r=   ZpopallZCONTENT_LENGTHr   Zappend_payload)r$   Z
dispparamsr=   r.   partexcr   r   r%   _gen_form_data   sF    

 zFormData._gen_form_datac                 C   s   | j r|  S |  S d S r'   )r   rT   rM   r(   r   r   r%   __call__   s    zFormData.__call__)r   TN)__name__
__module____qualname____doc__r   r   boolr   r7   r&   propertyr)   r>   r#   r   rI   rM   r   r   rT   r   rU   r   r   r   r%   r      s<      5%r   )r/   r4   typingr   r   r   r   urllib.parser   Z	multidictr   r    r
   r   r   helpersr   r   __all__r   r   r   r   r%   <module>   s   