
    *Gjr                         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          ZdS )    N)Iterable)Any)	urlencode)	MultiDictMultiDictProxy   )hdrs	multipartpayload)guess_filename)_safe_header)Payload)FormDatac                       e Zd ZdZ	 	 	 ddddee         ded	edz  d
eddf
dZe	defd            Z
dddddedededz  dedz  dedz  ddfdZdeddfdZdej        fdZdej        fdZdef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                0   t          j        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   s        X/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/formdata.py__init__zFormData.__init__   s     !0=="$1)fd## 	&,,..))FFFT5M22 	YF        c                     | j         S N)r   r%   s    r&   is_multipartzFormData.is_multipart+   s    !!r(   )content_typefilenamecontent_transfer_encodingnamevaluer-   r.   r/   c                h   t          |t          j                  rd| _        nDt          |t          t
          t          f          r"d}||t          j        |t                     |}t          |           t          d|i          }|'t          |t                    st          d|z            |*t          |t          j                  rt          ||          }|t          |           ||d<   d| _        i }|Lt          |t                    st          d|z            t          |           ||t          j        <   d| _        |Jt          |t                    st          d|z            d}t          j        |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.r0   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%   r0   r1   r-   r.   r/   msgtype_optionsheaderss	            r&   	add_fieldzFormData.add_field/   s    eRY'' 		 !%Dy*=>> 	 Y  $=$Ec#5666T'0&$'@'@
8S(A(AJXUVVV
5") < <%eT22H"""'/L$!%D#lC00 FU   &&&)5GD%&!%D$07== ')BC  
P  M#1222!%D\7E:;;;;;r(   c                    t          |          }|r|                    d          }t          |t          j                  r't          |d          }|                     ||           nt          |t          t          f          r(|	                    |
                                           n]t          |t           t          f          r/t          |          dk    r|\  }}|                     ||           nt          d|          |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   r3   r4   r   rB   r   r   extendr"   r#   lenr<   )r%   r   to_addreckfps         r&   r$   zFormData.add_fieldsg   s   f 	**Q--C#ry)) "3	22q#&&&&C.)!<== ciikk****C$// 	CHHMM2q"%%%%  <47< <    	 	 	 	 	r(   c                    g }| j         D ]#\  }}}|                    |d         |f           $| j        | j        nd}|dk    rd}nd|z  }t          j        t          |d|                                          |          S )Nr0   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@   _r1   r   r-   s          r&   _gen_form_urlencodedzFormData._gen_form_urlencoded   s    &*l 	7 	7"L!UKKf-u56666#'=#<$--'g>LLJWTL#d$999@@BB%
 
 
 	
r(   c           
      @   | j         D ]\  }}}	 t          j        |v r.t          j        ||t          j                 || j                  }nt          j        ||| j                  }n8# t          $ r+}t          dt          |          d|d|          |d}~ww xY w|rC |j	        	 d	d| j
        i| |j        J |j                            t          j        d           | j                            |           | j                                          | j        S )
zAEncode a list of fields using the multipart/form-data MIME format)r-   rA   rO   )rA   rO   zCan not serialize value type: z
 headers: z	
 value: Nr   r   )r   )r   r	   r=   r   get_payloadr   	Exceptionr<   typeset_content_dispositionr   rA   popallCONTENT_LENGTHr   append_payloadclear)r%   
dispparamsrA   r1   partexcs         r&   _gen_form_datazFormData._gen_form_data   sr   *., 	. 	.&J$//".%,T->%? '!%	  DD #.w  D    i15eggguuN    ?,, .2.@DN  
 |///##D$7>>>L''----|s   AA((
B2&BBc                 `    | j         r|                                 S |                                 S r*   )r   ra   rT   r+   s    r&   __call__zFormData.__call__   s1     	/&&(((,,...r(   )r   TN)__name__
__module____qualname____doc__r   r   boolr;   r'   propertyr,   rB   r$   r   rP   rT   r
   r   ra   r   rc   r   r(   r&   r   r      s         !#!"	! &+! ! !! ! t	! #! 
! ! ! !( "d " " " X" $(#046< 6< 6<6< 6<
 Dj6< *6< $':6< 
6< 6< 6< 6<p# $    0
g&: 
 
 
 
$!	 9 ! ! ! !F/' / / / / / /r(   r   )r3   r8   collections.abcr   typingr   urllib.parser   	multidictr   r    r	   r
   r   helpersr   http_writerr   r   __all__r   r   r(   r&   <module>rr      s    				  $ $ $ $ $ $       " " " " " " / / / / / / / / & & & & & & & & & & # # # # # # % % % % % %      
g/ g/ g/ g/ g/ g/ g/ g/ g/ g/r(   