o
    m=8jr                     @   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   W/home/nk/hobo-godmode/plappi-mvp/.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
| 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rt |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   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    