
    bCiy                         S SK r S SKrS SKJrJrJrJr  S SKJr  S SK	J
r
Jr  SSKJrJrJr  SSKJr  SSKJr  S	r " S
 S5      rg)    N)AnyIterableListOptional)	urlencode)	MultiDictMultiDictProxy   )hdrs	multipartpayload)guess_filename)Payload)FormDatac                      \ rS rSrSr   SS\\   S\S\\	   SS4S jjr
\S\4S	 j5       rSSSS
.S\	S\S\\	   S\\	   S\\	   SS4S jjrS\SS4S jrS\R                   4S jrS\R&                  4S jrS\4S jrSrg)r      zlHelper class for form body generation.

Supports multipart/form-data and application/x-www-form-urlencoded.
Nfieldsquote_fieldscharsetreturnc                 4   [         R                  " S5      U l        / U l        SU l        SU l        X l        X0l        [        U[        5      (       a  [        UR                  5       5      nO[        U[        [        45      (       d  U4nU R                  " U6   g )N	form-dataF)r   MultipartWriter_writer_fields_is_multipart_is_processed_quote_fields_charset
isinstancedictlistitemstuple
add_fields)selfr   r   r   s       J/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/formdata.py__init__FormData.__init__   sy     !00="$"")fd##&,,.)FFT5M22YF     c                     U R                   $ N)r   r&   s    r'   is_multipartFormData.is_multipart(   s    !!!r*   )content_typefilenamecontent_transfer_encodingnamevaluer0   r1   r2   c                   [        U[        R                  5      (       a  SU l        OE[        U[        [
        [        45      (       a%  SnUc   Uc  [        R                  " U[        5        Un[        SU05      nUb#  [        U[        5      (       d  [        SU-  5      eUc*  [        U[        R                  5      (       a  [        X!5      nUb  XGS'   SU l        0 nUb<  [        U[        5      (       d  [        SU-  5      eX8[        R                  '   SU l        UbG  [        U[        5      (       d  [        SU-  5      eSn[        R                  " U[        5        SU l        U R                   R#                  XxU45        g )	NTzIn v4, passing bytes will no longer create a file field. Please explicitly use the filename parameter or pass a BytesIO object.r3   z,filename must be an instance of str. Got: %sr1   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   str	TypeErrorr   r   CONTENT_TYPEr   append)	r&   r3   r4   r0   r1   r2   msgtype_optionsheaderss	            r'   	add_fieldFormData.add_field,   sz    eRYY''!%Dy*=>>Y  $=$Ec#56'0&$'@
8S(A(AAHL  
5")) < <%e2H'/$!%D#lC00ILX  *6D%%&!%D$07==')BC 
P  MM#12!%D\E:;r*   c                    [        U5      nU(       a  UR                  S5      n[        U[        R                  5      (       a  [        US5      nU R                  XC5        O[        U[        [        45      (       a   UR                  UR                  5       5        OZ[        U[         [        45      (       a%  [        U5      S:X  a  Uu  pEU R                  XE5        O[        SR                  U5      5      eU(       a  M  g g )Nr   unknown   zxOnly io.IOBase, multidict and (name, file) pairs allowed, use .add_field() for passing more complex parameters, got {!r})r"   popr    r6   r7   r   rE   r	   r   extendr#   r$   lenr?   format)r&   r   to_addreckfps         r'   r%   FormData.add_fieldsc   s    f**Q-C#ryy))"3	2q&C.)!<==ciik*C$//CHMq%  88>s  fr*   c                    / nU R                    H  u  p#nUR                  US   U45        M     U R                  b  U R                  OSnUS:X  a  SnOSU-  n[        R                  " [        USUS9R                  5       US9$ )Nr3   zutf-8z!application/x-www-form-urlencodedz-application/x-www-form-urlencoded; charset=%sT)doseqencoding)r0   )r   rA   r   r   BytesPayloadr   encode)r&   datarC   _r4   r   r0   s          r'   _gen_form_urlencodedFormData._gen_form_urlencoded{   s    &*ll"LUKKf-u56 '3 $(==#<$--'g>LMPWWL##d$9@@B%
 	
r*   c           
         U R                   (       a  [        S5      eU R                   H  u  pn [        R                  U;   a3  [
        R                  " UU[        R                     UU R                  S9nO [
        R                  " X2U R                  S9n U(       aX  UR                  "  S
SU R                  0UD6  UR                  c   eUR                  R                  [        R                  S5        U R                   R#                  U5        M     S	U l         U R                   $ ! [         a&  n[        S[        U5      < SU< SU< 35      UeSnAff = f)zAEncode a list of fields using the multipart/form-data MIME formatz$Form data has been processed already)r0   rD   rU   )rD   rU   zCan not serialize value type: z
 headers: z	
 value: Nr   T)r   )r   RuntimeErrorr   r   r@   r   get_payloadr   	Exceptionr?   typeset_content_dispositionr   rD   popallCONTENT_LENGTHr   append_payload)r&   
dispparamsrD   r4   partexcs         r'   _gen_form_dataFormData._gen_form_data   s6   EFF*.,,&J$$/"..%,T->->%? '!%	D #..D ,,.2.@.@DN
 ||///##D$7$7>LL''-9 +7< "||%  15eguN s   AD(7D((
E2!EEc                 d    U R                   (       a  U R                  5       $ U R                  5       $ r,   )r   rh   rZ   r-   s    r'   __call__FormData.__call__   s)    &&((,,..r*   )r   r   r   r   r   r   ) TN)__name__
__module____qualname____firstlineno____doc__r   r   boolr   r>   r(   propertyr.   rE   r%   r   rV   rZ   r   r   rh   r   rk   __static_attributes__rm   r*   r'   r   r      s     !#!!%	!! ! #	!
 
!& "d " " '+"&375<5< 5<
 sm5< 3-5< $,C=5< 
5<n# $ 0
g&:&: 
$#	 9 9 #J/' /r*   r   )r6   r;   typingr   r   r   r   urllib.parser   	multidictr   r	    r   r   r   helpersr   r   __all__r   rm   r*   r'   <module>r|      s4    	  0 0 " / & & # 
g/ g/r*   