a
     ÑOcÚ  ã                   @   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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.
    © TN)ÚfieldsÚquote_fieldsÚcharsetÚreturnc                 C   sd   t  d¡| _g | _d| _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   úG/var/www/html/gsl.tools/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| _n$t |tttfƒr8|d u r8|d u r8|}td|iƒ}|d urbt |tƒsbt	d| ƒ‚|d u r€t |tjƒr€t
||ƒ}|d ur–||d< d| _i }|d urÈt |tƒs¸t	d| ƒ‚||tj< d| _|d uröt |tƒsæt	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_TYPEZCONTENT_TRANSFER_ENCODINGr   Úappend)r#   r,   r-   r)   r*   r+   Útype_optionsÚheadersr   r   r$   Ú	add_field+   sB    
ÿ

ÿ

ÿÿ
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ƒrˆt|ƒ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.   r/   r   r9   r   r   Úextendr    r!   Úlenr4   Úformat)r#   r   Zto_addZrecÚkÚfpr   r   r$   r"   Y   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   r6   r   r   ÚBytesPayloadr   Úencode)r#   Údatar7   Ú_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 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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)   r8   rC   )r8   rC   z8Can not serialize value type: %r
 headers: %r
 value: %rNr   r   T)r   )r   ÚRuntimeErrorr   r
   r5   r   Úget_payloadr   Ú	Exceptionr4   ÚtypeZset_content_dispositionr   r8   ZpopallÚCONTENT_LENGTHr   Zappend_payload)r#   Z
dispparamsr8   r-   ÚpartÚexcr   r   r$   Ú_gen_form_dataƒ   sF    
üÿ
ÿÿý ÿÿÿzFormData._gen_form_datac                 C   s   | j r|  ¡ S |  ¡ S d S r&   )r   rP   rH   r'   r   r   r$   Ú__call__¨   s    zFormData.__call__)r   TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úboolr   r3   r%   Úpropertyr(   r9   r"   r   rD   rH   r   r   rP   r   rQ   r   r   r   r$   r      s6      üûùø.%r   )r.   Útypingr   r   r   r   Úurllib.parser   Z	multidictr   r   Ú r
   r   r   Zhelpersr   r   Ú__all__r   r   r   r   r$   Ú<module>   s   