o
    4˜Žjr  ã                   @   s’   d dl Z d dlZd dlmZ d dl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d
lmZ dZG dd„ dƒZdS )é    N)ÚIterable)ÚAny)Ú	urlencode)Ú	MultiDictÚMultiDictProxyé   )ÚhdrsÚ	multipartÚpayload)Úguess_filename)Ú_safe_header)ÚPayload)ÚFormDatac                   @   sÎ   e Zd ZdZ			d ddœdee ded	edB d
eddf
dd„Ze	defdd„ƒZ
ddddœdedededB dedB dedB 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.
    © TNF)Údefault_to_multipartÚfieldsÚquote_fieldsÚcharsetr   Úreturnc                C   s^   t  d¡| _g | _|| _|| _|| _t|tƒrt	| 
¡ ƒ}n
t|t	tfƒs(|f}| j|Ž  d S )Nú	form-data)r	   ÚMultipartWriterÚ_writerÚ_fieldsÚ_is_multipartÚ_quote_fieldsÚ_charsetÚ
isinstanceÚdictÚlistÚitemsÚtupleÚ
add_fields)Úselfr   r   r   r   r   r   úM/var/www/kodo/Anonymous/send/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
|ƒ td|iƒ}|d ur=t |tƒs=td| ƒ‚|d u rLt |tjƒrLt||ƒ}|d ur[t
|ƒ ||d< d| _i }|d urxt |tƒsltd| ƒ‚t
|ƒ ||tj< d| _|d ur’t |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   r   ÚstrÚ	TypeErrorr   r   ÚCONTENT_TYPEr   Úappend)	r"   r+   r,   r(   r)   r*   ÚmsgÚtype_optionsÚheadersr   r   r#   Ú	add_field/   sN   
ÿ

ÿ

ÿÿÿ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é   ztOnly io.IOBase, multidict and (name, file) pairs allowed, use .add_field() for passing more complex parameters, got )r   Úpopr   r-   r.   r   r<   r   r   Úextendr   r    Úlenr6   )r"   r   Úto_addÚrecÚkÚfpr   r   r#   r!   g   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   r8   r   r
   ÚBytesPayloadr   Úencode)r"   Údatar:   Ú_r,   r   r(   r   r   r#   Ú_gen_form_urlencoded   s   þzFormData._gen_form_urlencodedc                 C   sÖ   | j D ]_\}}}ztj|v rtj||tj || jd�}n	tj||| jd�}W n ty> } ztdt|ƒ||f ƒ|‚d}~ww |r\|j		dd| j
i|¤Ž |jdusTJ ‚|j tjd¡ | j |¡ q| j  ¡  | jS )zAEncode a list of fields using the multipart/form-data MIME format)r(   r;   rG   )r;   rG   z8Can not serialize value type: %r
 headers: %r
 value: %rNr   r   )r   )r   r   r7   r
   Úget_payloadr   Ú	Exceptionr6   ÚtypeÚset_content_dispositionr   r;   ÚpopallÚCONTENT_LENGTHr   Úappend_payloadÚclear)r"   Ú
dispparamsr;   r,   ÚpartÚexcr   r   r#   Ú_gen_form_data‘   sH   
üÿ€ÿÿý€ÿÿÿÿ
zFormData._gen_form_datac                 C   s   | j r|  ¡ S |  ¡ S r%   )r   rX   rL   r&   r   r   r#   Ú__call__´   s   zFormData.__call__)r   TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úboolr5   r$   Úpropertyr'   r<   r!   r
   rH   rL   r	   r   rX   r   rY   r   r   r   r#   r      sP    üúþýüú
ùùþýûúù
ø8#r   )r-   r2   Úcollections.abcr   Útypingr   Úurllib.parser   Ú	multidictr   r   Ú r   r	   r
   Úhelpersr   Úhttp_writerr   r   Ú__all__r   r   r   r   r#   Ú<module>   s    