o
    RÊÆhÚ  ã                   @   s~   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   ú]/var/www/html/HyperOracle/crypto_trader/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 u r|d u r|}td|iƒ}|d ur1t |tƒs1t	d| ƒ‚|d u r@t |tjƒr@t
||ƒ}|d urK||d< d| _i }|d urdt |tƒs\t	d| ƒ‚||tj< d| _|d ur{t |tƒsst	d| ƒ‚||tj< d| _| j |||f¡ d S )NTr,   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#   r,   r-   r)   r*   r+   Útype_optionsÚheadersr   r   r$   Ú	add_field+   sB   
ÿ

ÿ

ÿÿ
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!   Úlenr4   Úformat)r#   r   Úto_addÚrecÚkÚfpr   r   r$   r"   Y   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   r7   r   r   ÚBytesPayloadr   Úencode)r#   Údatar8   Ú_r-   r   r)   r   r   r$   Ú_gen_form_urlencodedq   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)   r9   rF   )r9   rF   z8Can not serialize value type: %r
 headers: %r
 value: %rNr   r   T)r   )r   ÚRuntimeErrorr   r
   r5   r   Úget_payloadr   Ú	Exceptionr4   ÚtypeÚset_content_dispositionr   r9   ÚpopallÚCONTENT_LENGTHr   Úappend_payload)r#   Ú
dispparamsr9   r-   ÚpartÚexcr   r   r$   Ú_gen_form_dataƒ   sL   
üÿ€ÿÿý€ÿÿÿÿzFormData._gen_form_datac                 C   s   | j r|  ¡ S |  ¡ S r&   )r   rW   rK   r'   r   r   r$   Ú__call__¨   s   zFormData.__call__)r   TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úboolr   r3   r%   Úpropertyr(   r:   r"   r   rG   rK   r   r   rW   r   rX   r   r   r   r$   r      sH    üþýü
ûùþýûúù
ø.%r   )r.   Útypingr   r   r   r   Úurllib.parser   Ú	multidictr   r   Ú r
   r   r   Úhelpersr   r   Ú__all__r   r   r   r   r$   Ú<module>   s    