
    yi~                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZm Z m!Z! ddl"m#Z#m$Z$ dd	l%m&Z&m'Z'm(Z(m)Z)m*Z* dd
l+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; dZ<erddl=m>Z>  G d de?      Z@ G d de?      ZAdeeB   deeeB   eeBeBf   f   fdZC	 d'deeBeBf   deBdeeB   fdZD G d d      ZE G d d      ZF e9eFe5j                         G d d e6             ZH G d! d"      ZIee6eBeBf   ZJ G d# d$e6      ZK G d% d&      ZLy)(    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxyMultiMapping   )ZLibCompressorZLibDecompressor)CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARTOKENparse_mimetypereify)HeadersParser)JsonPayloadLookupErrorOrderPayloadStringPayloadget_payloadpayload_type)StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec                       e Zd Zy)r1   N__name__
__module____qualname__     L/root/polymarket_arb/.venv/lib/python3.12/site-packages/aiohttp/multipart.pyr1   r1   B       r<   r1   c                       e Zd Zy)r2   Nr7   r;   r<   r=   r2   r2   F   r>   r<   r2   headerreturnc                 R   dt         dt        fddt         dt        fd}dt         dt        ffd}dt         dt        fd}dt         dt        fd}dj                  t        t        j
                  t                    d	d
t         dt         dt         fd}| sd i fS | j                  d      ^}} |      s"t        j                  t        |              d i fS i }|r	|j                  d      }	d|	vr"t        j                  t        |              d i fS |	j                  dd      \  }
}|
j                         j                         }
|j                         }|
|v r"t        j                  t        |              d i fS  |
      st        j                  t        |	              ||
      r> ||      r ||dd       }n |      st        j                  t        |	              ||
      rT ||      r|j                  dd      \  }}}|xs d}n t        j                  t        |	             ]	 t!        ||d      }nd} ||      rd} ||dd j                  d            }nL |      rd}nA|r?| d|d    } ||      r-|j                  d        ||dd j                  d            }d}|r"t        j                  t        |              d i fS |||
<   |r	|j                         |fS # t"        $ r" t        j                  t        |	             Y Hw xY w)NstringrA   c                 @    t        |       xr t        t        |       k\  S N)boolr"   setrC   s    r=   is_tokenz+parse_content_disposition.<locals>.is_tokenM   s    F|4V 44r<   c                 .    | d   | d   cxk(  xr dk(  S c S )Nr   "r;   rH   s    r=   	is_quotedz,parse_content_disposition.<locals>.is_quotedP   s     ayF2J-#----r<   c                 @     |       xr | j                  d      dk(  S )N'   )count)rC   rI   s    r=   
is_rfc5987z-parse_content_disposition.<locals>.is_rfc5987S   s!    :FLL$5$::r<   c                 $    | j                  d      S )N*)endswithrH   s    r=   is_extended_paramz4parse_content_disposition.<locals>.is_extended_paramV   s    s##r<   c                     | j                  d      dz   }|sy| j                  d      r| |d n| |d  }|j                         S )NrT   r   FrK   )findrU   isdigit)rC   pos	substrings      r=   is_continuous_paramz6parse_content_disposition.<locals>.is_continuous_paramY   sH    kk#"&,ooc&:F3rNst	  ""r<    )charstextr^   c                8    t        j                  d| dd|       S )Nz\\([z])z\1)resub)r_   r^   s     r=   unescapez+parse_content_disposition.<locals>.unescape`   s    vvugR(%66r<   ;r   =r   rK   rO   rP   utf-8strictTFz\/)strrF   joinmapra   escaper!   splitwarningswarnr1   poplowerstriplstripr2   r   UnicodeDecodeError)r@   rM   rR   rV   r\   rc   disptypepartsparamsitemkeyvalueencoding_failed_valuerI   s                   @r=   r3   r3   J   s   5 5 5.# .$ .;3 ;4 ;$# $$ $#C #D # -/GGC		44H,I 7s 7c 7c 7 Rx||C(HuH1&9:RxF
yy|d?MM5f=>8OZZQ'
Uiik!&=MM5f=>8O}MM4T:; % q-e_8>?s#% %*[[a%8"!U#.w8>?x: F q!3!3E!:;% "7!E!H:.V$IIaL$VAb\%8%8%?@E"F9&ABRxsy | >>V##5 & 8>?s   ;K; ;'L&%L&rv   namec                   
 d|z  
| sy 
| v r| 
   S || v r| |   S g }t        
fd| j                         D              }t        |      D ]T  \  }\  }}|j                  dd      \  }}|j	                  d      r|d d }|t        |      k(  r|j                  |       T n |sy dj                  |      }d|v r)|j                  dd      \  }	}}|	xs d	}	t        ||	d
      S |S )Nz%s*c              3   P   K   | ]  \  }}|j                        s||f  y wrE   )
startswith).0rx   ry   name_sufs      r=   	<genexpr>z/content_disposition_filename.<locals>.<genexpr>   s)      
'S%S^^H=US%L
s   &	&rT   r   rK   r]   rO   rP   rf   rg   )	sorteditems	enumeraterl   rU   rh   appendri   r   )rv   r~   ru   fnparamsnumrx   ry   r{   tailrz   r   s             @r=   r4   r4      s    t|H	V	h	d| 
+1<<>
 
 "+8!4 	C#uiiQ'GAt}}S!CRys3xU#	 %<!&S!!4Ha*7H5(H55r<   c                   j    e Zd ZdZ	 	 	 	 	 	 ddZddZded   fdZdefdZ	de
ed      fd	Zdd
Zy)MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    rA   Nc                      || _         || _        y rE   )respstream)selfr   r   s      r=   __init__z!MultipartResponseWrapper.__init__   s    
 	r<   c                     | S rE   r;   r   s    r=   	__aiter__z"MultipartResponseWrapper.__aiter__       r<   )r.   r0   c                 R   K   | j                          d {   }|t        |S 7 wrE   nextStopAsyncIterationr   parts     r=   	__anext__z"MultipartResponseWrapper.__anext__   +      YY[ <$$ !   '%'c                 J    | j                   j                  j                         S )z2Returns True when all response data had been read.)r   contentat_eofr   s    r=   r   zMultipartResponseWrapper.at_eof   s    yy  ''))r<   c                    K   | j                   j                          d{   }| j                   j                         r| j                          d{    |S 7 87 w)z#Emits next multipart reader object.N)r   r   r   releaser   rw   s     r=   r   zMultipartResponseWrapper.next   sJ      [[%%'';;,,.   ( s!   AA1AAAAc                 T   K   | j                   j                          d{    y7 w)z_Release the connection gracefully.

        All remaining content is read to the void.
        N)r   r   r   s    r=   r   z MultipartResponseWrapper.release   s     
 ii!!!s   (&()r   r5   r   r.   rA   N)rA   r   rA   N)r8   r9   r:   __doc__r   r   r   r   rF   r   r   r   r   r;   r<   r=   r   r      si     " 
		2	3* *	%;<	="r<   r   c                      e Zd ZdZdZdedddeddfd	Zded    fd
Z	defdZ
dee   fdZdddedefdZefdedefdZdedefdZdedefdZdefdZd%dZdddee   defdZdddee   deeeef      fdZdddee   deeeef      fdZdefdZdedefdZdedefdZdedefd Z d!edefd"Z!e"dee   fd#       Z#e"dee   fd$       Z$y)&r0   z&Multipart reader for single body part.i    boundaryheadersCIMultiDictProxy[str]r   rA   Nc                     || _         || _        || _        d| _        | j                   j	                  t
        d       }|t        |      nd | _        d| _        t               | _
        d | _        d| _        i | _        y )NFr   )r   	_boundary_content_at_eofgetr   int_length_read_bytesr   _unread_prev_chunk_content_eof_cache)r   r   r   r   lengths        r=   r   zBodyPartReader.__init__  sp     !!!.$7&,&8s6{d%*W,0&(r<   c                     | S rE   r;   r   s    r=   r   zBodyPartReader.__aiter__  r   r<   c                 R   K   | j                          d {   }|t        |S 7 wrE   r   r   s     r=   r   zBodyPartReader.__anext__  s)     YY[ <$$ !r   c                 H   K   | j                          d {   }|sy |S 7 	wrE   )readr   s     r=   r   zBodyPartReader.next  s$     YY[  !s   " 
"Fdecoder   c                   K   | j                   ryt               }| j                   s?|j                  | j                  | j                         d{          | j                   s?|r| j                  |      S |S 7 *w)zReads body part data.

        decode: Decodes data following by encoding
                method from Content-Encoding header. If it missed
                data remains untouched
        r<   N)r   	bytearrayextend
read_chunk
chunk_sizer   )r   r   datas      r=   r   zBodyPartReader.read   sa      <<{,,KKdoodoo>>? ,,;;t$$ ?s   AA<A:A<%A<sizec                   K   | j                   ry| j                  r| j                  |       d{   }n| j                  |       d{   }| xj                  t        |      z  c_        | j                  | j                  k(  rd| _         | j                   r.| j                  j                          d{   }d|k(  sJ d       |S 7 7 7 w)zWReads body part content chunk of the specified size.

        size: chunk size
        r<   NT   
z3reader did not read all the data or it is malformed)r   r   _read_chunk_from_length_read_chunk_from_streamr   lenr   readline)r   r   chunkclrfs       r=   r   zBodyPartReader.read_chunk0  s     
 <<<<66t<<E66t<<ECJ&t||+DL<<//11D4EDE =< 2s4   .CC	C
CA+C6C7CCCc                    K   | j                   J d       t        || j                   | j                  z
        }| j                  j	                  |       d {   }|S 7 w)Nz(Content-Length required for chunked read)r   minr   r   r   )r   r   r   r   s       r=   r   z&BodyPartReader._read_chunk_from_lengthF  sZ      ||'S)SS't||d.>.>>?
mm((44 5s   AA AA c           
      
  K   |t        | j                        dz   k\  sJ d       | j                  d u }|r(| j                  j	                  |       d {   | _        | j                  j	                  |       d {   }| xj
                  t        | j                  j                               z  c_        | j
                  dk  sJ d       | j                  J | j                  |z   }d| j                  z   }|r|j                  |      }n;|j                  |t        dt        | j                        t        |      z
              }|dk\  rt        j                         5  t        j                  dt               | j                  j                  ||d         d d d        ||kD  r| j                  d | | _        |t        | j                        | }|sd	| _        | j                  }|| _        |S 7 7 y# 1 sw Y   ^xY ww)
NrP   z<Chunk size must be greater or equal than boundary length + 2   zReading after EOFr   r   ignore)categoryT)r   r   r   r   r   r   r   r   rX   maxrm   catch_warningsfilterwarningsDeprecationWarningunread_datar   )r   r   first_chunkr   windowrb   idxresults           r=   r   z&BodyPartReader._read_chunk_from_streamN  s     C'!++	JI	J+&&$.%)]]%7%7%==Dmm((..S!5!5!788  1$9&99$+++!!E)&++c"C++c3q#d.>.>*?#c(*J#KLC!8((* 8'';MN))&,78 cz#'#3#3DS#9 3t//037E#!! 1  >.8 8s>   AHG1'H;G4<C$H :G7AH4H7H <Hc                 h  K   | j                   ry| j                  r| j                  j                         }n"| j                  j	                          d{   }|j                  | j                        r[|j                  d      }| j                  }| j                  dz   }||k(  s||k(  r#d| _         | j                  j                  |       y|S | j                  j	                          d{   }|j                  | j                        r|dd }| j                  j                  |       |S 7 7 Cw)z Reads body part by line by line.r<   Nr      --T)	r   r   popleftr   r   r   r   rstripr   )r   linesliner   last_boundary	next_lines         r=   r   zBodyPartReader.readlinep  s     <<<<<<'')D//11D??4>>* KK(E~~H NNU2M E]$:###D)  #mm4466I##DNN3CRyLL	*' 2 7s&   AD2D.BD2,D0-AD20D2c                    K   | j                   ry| j                   s1| j                  | j                         d{    | j                   s0yy7 w)z0Like read(), but reads all the data to the void.N)r   r   r   r   s    r=   r   zBodyPartReader.release  s9     <<,,//$//222 ,,2s   8AAAA)rz   rz   c                   K   | j                  d       d{   }|xs | j                  d      }|j                  |      S 7 +w)z;Like read(), but assumes that body part contains text data.Tr   Nrf   default)r   get_charsetr   r   rz   r   s      r=   r_   zBodyPartReader.text  sG     YYdY++ @t///@{{8$$	 ,s   AA,Ac                   K   | j                  d       d{   }|sy|xs | j                  d      }t        t        t        t
        f   t        j                  |j                  |                  S 7 \w)z<Like read(), but assumes that body parts contains JSON data.Tr   Nrf   r   )	r   r   r   r	   rh   r   jsonloadsr   r   s      r=   r   zBodyPartReader.json  sc     YYdY++@t///@DcNDJJt{{8/D$EFF	 ,s   A7A5AA7c                
  K   | j                  d       d{   }|sg S ||}n| j                  d      }	 |j                         j                  |      }t        |d|      S 7 M# t        $ r t        d|z        w xY ww)zFLike read(), but assumes that body parts contain form urlencoded data.Tr   Nrf   r   z'data cannot be decoded with %s encoding)keep_blank_valuesrz   )r   r   r   r   rs   
ValueErrorr   )r   rz   r   real_encodingdecoded_datas        r=   formzBodyPartReader.form  s     YYdY++I$M ,,W,=M	X;;=//>L ""
 	
 , " 	XFVWW	Xs&   BA&BA( B(B  Bc                     | j                   S )z<Returns True if the boundary was reached or False otherwise.r   r   s    r=   r   zBodyPartReader.at_eof      ||r<   r   c                     t         | j                  v r| j                  |      }t        | j                  v r| j	                  |      S |S )zDecodes data.

        Decoding is done according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r   r   _decode_content_transferr   _decode_content)r   r   s     r=   r   zBodyPartReader.decode  sB     %4006Dt||+''--r<   c                     | j                   j                  t        d      j                         }|dk(  r|S |dv rt	        |d      j                  |      S t        d|       )Nr]   identity>   gzipdeflateT)rz   suppress_deflate_headerunknown content encoding: )r   r   r   rp   r   decompress_syncRuntimeErrorr   r   rz   s      r=   r   zBodyPartReader._decode_content  sl    <<##$4b9??Az!K**#!(, od#$
 7zBCCr<   c                    | j                   j                  t        d      j                         }|dk(  rt	        j
                  |      S |dk(  rt        j                  |      S |dv r|S t        dj                  |            )Nr]   base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {})
r   r   r   rp   r  	b64decodebinasciia2b_qpr  formatr  s      r=   r   z'BodyPartReader._decode_content_transfer  s|    <<##$=rBHHJx##D))++??4((33K:AA(K r<   r   c                     | j                   j                  t        d      }t        |      }|j                  j                  d|      S )z>Returns charset parameter from Content-Type header or default.r]   charset)r   r   r    r#   
parameters)r   r   ctypemimetypes       r=   r   zBodyPartReader.get_charset  s;      r2!%(""&&y'::r<   c                 p    t        | j                  j                  t                    \  }}t	        |d      S )z|Returns name specified in Content-Disposition header.

        If the header is missing or malformed, returns None.
        r~   r3   r   r   r   r4   r   r{   rv   s      r=   r~   zBodyPartReader.name  s/     .dll.>.>?R.ST	6+FF;;r<   c                 p    t        | j                  j                  t                    \  }}t	        |d      S )zReturns filename specified in Content-Disposition header.

        Returns None if the header is missing or malformed.
        filenamer  r  s      r=   r  zBodyPartReader.filename  s/     .dll.>.>?R.ST	6+FJ??r<   r   )%r8   r9   r:   r   r   bytesr-   r   r   r   r   r   r   rF   r   r   r   r   r   r   r   rh   r_   r	   r   r   r   r   r   r   r   r   r   r   r$   r~   r  r;   r<   r=   r0   r0      s   0J))(?)JV)	)=)9:  HUO  ,1 D U   ,6 S % ,# %  #  %  D :3 7; %hsm %s % 7; Ghsm GxSRUX?W G 7; 
hsm 
tE#s(O?T 
( 
5 
U 

DE 
De 
DU u ;3 ;3 ; <hsm < < @(3- @ @r<   r0   )orderc                   @     e Zd Zdedededdf fdZdeddfdZ xZS )	BodyPartReaderPayloadry   argskwargsrA   Nc                     t        |   |g|i | i }|j                  |j                  |d<   |j                  |j                  |d<   |r | j                  di | y y )Nr~   r  )
attachmentT)superr   r~   r  set_content_disposition)r   ry   r  r  rv   	__class__s        r=   r   zBodyPartReaderPayload.__init__  si    000!#::!"ZZF6N>>%!&F:(D((FvF r<   writerc                    K   | j                   }|j                  d       d {   }|rF|j                  |j                  |             d {    |j                  d       d {   }|rEy y 7 M7 %7 w)Ni   )r   )r}   r   writer   )r   r%  fieldr   s       r=   r'  zBodyPartReaderPayload.write	  sk     &&E&22,,u||E2333***66E  336s9   "A8A2)A8A4A8(A6)A80A84A86A8)r8   r9   r:   r0   r   r   r'  __classcell__r$  s   @r=   r  r    s<    
Gn 
GS 
GC 
GD 
G7# 7$ 7r<   r  c                      e Zd ZdZeZdZeZde	e
e
f   deddfdZded   fdZdeed ef      fd	Zed
ddefd       ZdefdZdeed ef      fdZddZded ef   fdZddded ef   fdZde
fdZdefdZddZddZddZddZ y)r.   zMultipart body reader.Nr   r   rA   c                     || _         d| j                         z   j                         | _        || _        d | _        d| _        d| _        g | _        y )Nz--FT)	r   _get_boundaryencoder   r   
_last_partr   _at_bofr   )r   r   r   s      r=   r   zMultipartReader.__init__  sJ    !3!3!55==?NR$&r<   r0   c                     | S rE   r;   r   s    r=   r   zMultipartReader.__aiter__%  s	     r<   c                 R   K   | j                          d {   }|t        |S 7 wrE   r   r   s     r=   r   zMultipartReader.__anext__*  r   r   responser5   c                 `    | j                  | | |j                  |j                              }|S )zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsr   r   )clsr3  objs      r=   from_responsezMultipartReader.from_response2  s3     &&c(**H,<,<=
 
r<   c                     | j                   S )z@Returns True if the final boundary was reached, false otherwise.r   r   s    r=   r   zMultipartReader.at_eof@  r   r<   c                 X  K   | j                   ry| j                          d{    | j                  r | j                          d{    d| _        n| j	                          d{    | j                   ry| j                          d{   | _        | j                  S 7 ~7 \7 >7 w)z#Emits the next multipart body part.NF)r   _maybe_release_last_partr0  _read_until_first_boundary_read_boundaryfetch_next_partr/  r   s    r=   r   zMultipartReader.nextD  s     
 <<++---<<11333 DL%%'''<< $ 4 4 66 	.3 ( 7sE   !B*B"#B*B$B*'B&($B*B(B*$B*&B*(B*c                    K   | j                   sA| j                          d{   }|y|j                          d{    | j                   s@yy7 .7 w)z=Reads all the body parts to the void till the final boundary.N)r   r   r   r   s     r=   r   zMultipartReader.releaseV  sD     ,,$D|,,.  	 ,,$ !s%    AAAAAAAc                 `   K   | j                          d{   }| j                  |      S 7 w)z"Returns the next body part reader.N)_read_headers_get_part_reader)r   r   s     r=   r>  zMultipartReader.fetch_next_part^  s/      **,,$$W-- -s   .,.r   c                 8   |j                  t        d      }t        |      }|j                  dk(  rD| j                   t        |       || j
                        S | j	                  || j
                        S | j                  | j                  || j
                        S )zDispatches the response by the `Content-Type` header.

        Returns a suitable reader instance.

        :param dict headers: Response headers
        r]   	multipart)r   r    r#   typemultipart_reader_clsr   part_reader_clsr   )r   r   r  r  s       r=   rB  z MultipartReader._get_part_readere  s     L"-!%(==K'((0!tDz'4==99,,WdmmDD''OOr<   c                    t        | j                  t                 }|j                  dk(  sJ d       d|j                  vrt        d| j                  t           z        |j                  d   }t        |      dkD  rt        d|z        |S )NrD  z!multipart/* content type expectedr   z$boundary missed for Content-Type: %sF   z&boundary %r is too long (70 chars max))r#   r   r    rE  r  r   r   )r   r  r   s      r=   r-  zMultipartReader._get_boundaryy  s    !$,,|"<=}}+P-PP+X0006l9SS  &&z2x=2EPQQr<   c                    K   | j                   r| j                   j                         S | j                  j                          d {   S 7 wrE   )r   ro   r   r   r   s    r=   	_readlinezMultipartReader._readline  s9     <<<<##%%]]++----s   AAAAc                    K   	 | j                          d {   }|dk(  rt        d| j                  z        |j                         }|| j                  k(  ry || j                  dz   k(  rd| _        y p7 \w)NTr<   z#Could not find starting boundary %rr   )rK  r   r   r   r   r   r   s     r=   r<  z*MultipartReader._read_until_first_boundary  sw     ..**E| 9T^^L  LLNE&$..500# *s   A6A4AA6c                   K   | j                          d {   j                         }|| j                  k(  ry || j                  dz   k(  ryd| _        | j                          d {   }| j                          d {   }|d d dk(  r| j                  j                  |       y | j                  j                  ||g       y t        d|d| j                        7 7 {7 ew)Nr   TrP   zInvalid boundary z, expected )rK  r   r   r   r   r   r   r   )r   r   epiloguer   s       r=   r=  zMultipartReader._read_boundary  s     ~~''//1DNN"dnnu,,DL!^^--H"nn..I !}%##I.
 ##Y$9:0	T^^DVWXX) (
 ..s5   C%CAC%%C!&C%=C#>A"C%!C%#C%c                    K   dg}	 | j                   j                          d {   }|j                         }|j                  |       |snGt	               }|j                  |      \  }}|S 7 Iw)Nr<   )r   r   rq   r   r%   parse_headers)r   linesr   parserr   raw_headerss         r=   rA  zMultipartReader._read_headers  so     --0022EKKMELL  %33E: 3s   "A0A.A
A0c                   K   | j                   s| j                   j                         s"| j                   j                          d{    | j                  j	                  | j                   j                         d| _         yy7 <w)z8Ensures that the last read body part is read completely.N)r/  r   r   r   r   r   s    r=   r;  z(MultipartReader._maybe_release_last_part  sa     ??&??))+oo--///LL 7 78"DO	 '/s   ABB=Br   )rA   r   )!r8   r9   r:   r   r   r5  rF  r0   rG  r   rh   r-   r   r   r   r   r   r   classmethodr8  rF   r   r   r   r>  rB  r-  r  rK  r<  r=  rA  r;  r;   r<   r=   r.   r.     s+     4  $O'S 1 'L 'T '	'	(
	%)>9:	; " 
"  	%)>9:	;$!.	 .0	1.P(P 
 .0	1P(s  . .
Y.
#r<   r.   c                       e Zd ZdZddedee   ddf fdZddZdeee	      d	ee	   d
ee
   ddfdZdee   fdZdefdZdefdZ ej(                  d      Z ej(                  d      Zedefd       Zedefd       Zd dedeee      defdZdedefdZ	 d dedeee      defdZ	 d de e!e"eef      e#eef   f   deee      defdZ$edee   fd       Z%d!dededdfdZ& xZ'S )"r/   zMultipart body writer.Nsubtyper   rA   c                     ||nt        j                         j                  }	 |j                  d      | _        d| d| j                   }t        | %  d |       g | _
        y # t
        $ r t        d      d w xY w)Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuiduuid4hexr.  r   UnicodeEncodeErrorr   _boundary_valuer"  r   _parts)r   rX  r   r  r$  s       r=   r   zMultipartWriter.__init__  s    '389I9I	S%__W5DN WI[1E1E0FGE2#% " 	SGHdR	Ss   A& &A<c                     | S rE   r;   r   s    r=   	__enter__zMultipartWriter.__enter__  r   r<   exc_typeexc_valexc_tbc                      y rE   r;   )r   rd  re  rf  s       r=   __exit__zMultipartWriter.__exit__  s     	r<   c                 ,    t        | j                        S rE   )iterra  r   s    r=   __iter__zMultipartWriter.__iter__  s    DKK  r<   c                 ,    t        | j                        S rE   )r   ra  r   s    r=   __len__zMultipartWriter.__len__  s    4;;r<   c                      y)NTr;   r   s    r=   __bool__zMultipartWriter.__bool__  s    r<   s   \A[!#$%&'*+\-.^_`|~\w]+\Zs   [\x00-\x08\x0A-\x1F\x7F]c                 H   | j                   }t        j                  | j                  |      r|j	                  d      S t        j
                  | j                  |      rt        d      |j                  dd      }|j                  dd      }d|j	                  d      z   dz   S )zzWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode string.
        rZ  z*boundary value contains invalid characters   \s   \\   "s   \"rL   )	r   ra   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr   replace)r   ry   quoted_value_contents      r=   r`  zMultipartWriter._boundary_value  s    & 88D++U3<<((99T44e<IJJ  %}}UG<3;;D&I)0099C??r<   c                 8    | j                   j                  d      S )NrZ  )r   r   r   s    r=   r   zMultipartWriter.boundary  s    ~~$$W--r<   r7  r   c                    |
t               }t        |t              r,|j                  j	                  |       | j                  |      S 	 t        ||      }| j                  |      S # t        $ r t        d|z        w xY w)Nr   zCannot create payload from %r)	r   
isinstancer)   r   updateappend_payloadr+   r'   	TypeError)r   r7  r   payloads       r=   r   zMultipartWriter.append  s    ?!mGc7#KKw'&&s++4%c7; **733  G ?# EFFGs   
A( (B r  c                    |j                   j                  t        d      j                         }|r|dvrt	        d|       |dk(  rd}|j                   j                  t
        d      j                         }|dvrt	        dj                  |            |dk(  rd}|j                  }| |s|st        |      |j                   t        <   | j                  j                  |||f       |S )	z)Adds a new body part to multipart writer.r]   )r   r   r   r  r   N)r]   r  r  r  r  r  )r   r   r   rp   r  r   r  r   rh   r   ra  r   )r   r  rz   te_encodingr   s        r=   r~  zMultipartWriter.append_payload)  s     #*//"5"5#
 %' 	 (GG!;H:FGGz!H &-__%8%8%&
 %' 	 JJ:AA+N  ("K ||X.1$iGOON+GX{;<r<   c                 R    |
t               }| j                  t        ||            S )zHelper to append JSON part.r{  )r   r~  r&   )r   r7  r   s      r=   append_jsonzMultipartWriter.append_jsonI  s(     ?!mG"";sG#DEEr<   c                     t        |t        t        f      sJ |
t               }t        |t              rt	        |j                               }t        |d      }| j                  t        ||d            S )z&Helper to append form urlencoded part.T)doseqz!application/x-www-form-urlencoded)r   r[  )	r|  r   r   r   listr   r   r~  r*   )r   r7  r   r   s       r=   append_formzMultipartWriter.append_formR  sn     #'2333?!mGc7#syy{#CD)""g4W
 	
r<   c                 .   d}| j                   D ]e  \  }}}|s|s|j                   y|t        dt        | j                        z   dz   |j                  z   t        |j
                        z   dz         z  }g |dt        | j                        z   dz   z  }|S )zSize of the payload.r   NrP      )ra  r   r   r   r   _binary_headers)r   totalr   rz   r  s        r=   r   zMultipartWriter.sizeg  s     +/;; 	'D(K;$))*;Sdnn%& )) d**+	,
  E		 	S((1,,r<   r%  close_boundaryc                 t  K   | j                   D ]  \  }}}|j                  d| j                  z   dz          d{    |j                  |j                         d{    |s|rct	        |      }|r|j                  |       |r|j                  |       |j                  |       d{    |j                          d{    n|j                  |       d{    |j                  d       d{     |r*|j                  d| j                  z   dz          d{    yy7 7 7 7 l7 T7 =7 w)zWrite body.r   r   Ns   --
)ra  r'  r   r  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r   r%  r  r   rz   r  ws          r=   r'  zMultipartWriter.write{  s    +/;; 	('D(K,,ut~~5?@@@,,t33444;*62((2%%k2jjm##kkm##jj(((,,w'''	(" ,,ut~~5	ABBB ! A4 $#(' Cs|   8D8D*"D8D,AD8+D.,D8D0D8D2D86D47,D8#D6$D8,D8.D80D82D84D86D8)mixedN)rA   r/   rE   )T)(r8   r9   r:   r   rh   r   r   rc  r   BaseExceptionr   rh  r
   _Partrk  r   rm  rF   ro  ra   compilert  rv  propertyr`  r   r   r   r)   r   r~  r  r   r   r   r   r  r   r'  r)  r*  s   @r=   r/   r/     s    & &# &RV &"4./ -( '	
 
!(5/ !   $  $$AB!+,H!I@ @ @> .# . .4# 4c1B(C 4w 4g ' B @DFF!),s*;!<F	F 04
8E#s(O,gc3h.??@
 ,s+,
 
	
* hsm  &C# Ct Ct Cr<   r/   c                   r    e Zd ZdeddfdZdeddfdZdej                  fdede	ddfd	Z
dd
ZdeddfdZy)r  r%  rA   Nc                 <    || _         d | _        d | _        d | _        y rE   )_writer	_encoding	_compress_encoding_buffer)r   r%  s     r=   r   zMultipartPayloadWriter.__init__  s    (,3759r<   rz   c                 V    |dk(  r|| _         t               | _        y |dk(  rd| _         y y )Nr  r  )r  r   r  )r   rz   s     r=   r  z&MultipartPayloadWriter.enable_encoding  s0    x%DN$-KD!++/DN ,r<   r   strategyc                 *    t        |d|      | _        y )NT)rz   r   r  )r   r  )r   rz   r  s      r=   r  z)MultipartPayloadWriter.enable_compression  s     ($(
r<   c                 ^  K   | j                   <| j                   j                         }|r d | _         | j                  |       d {    | j                  dk(  rN| j                  rA| j
                  j                  t        j                  | j                               d {    y y y 7 b7 	w)Nr  )r  flushr'  r  r  r  r  	b64encoderM  s     r=   r  z MultipartPayloadWriter.write_eof  s     >>%NN((*E!%jj'''>>X%$$ll(()9)9$:O:O)PQQQ % & ( Rs%   AB-B)AB-!B+"B-+B-r   c                   K   | j                   (|r&| j                   j                  |       d {   }|sy | j                  dk(  r| j                  }|J |j	                  |       |rjt        t        |      d      \  }}|d |dz   ||dz  d  c}| _        |r9t        j                  |      }| j                  j                  |       d {    y y y | j                  dk(  r7| j                  j                  t        j                  |             d {    y | j                  j                  |       d {    y 7 7 t7 .7 w)Nr  r   r  )r  compressr  r  r   divmodr   r  r  r  r'  r  b2a_qp)r   r   bufdivmod	enc_chunkb64chunks          r=   r'  zMultipartPayloadWriter.write  s'    >>%"nn55e<<>>X%''C?"?JJu!#c(A.S47	#'NCa	N0	40%//	:H,,,,X666   ^^11,,$$X__U%;<<<,,$$U+++% = 7<+sG   -ED>BEEAEE#E8E9EEEEr   )r8   r9   r:   r   r   rh   r  zlibZ_DEFAULT_STRATEGYr   r  r  r  r'  r;   r<   r=   r  r    sk    :s :t :0 0 0 (9P9P

36
	
	R, ,4 ,r<   r  )r  )Mr  r  r   ra   r\  rm   r  collectionsr   typesr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   urllib.parser   r   r   	multidictr   r   r   compression_utilsr   r   hdrsr   r   r   r   r    helpersr!   r"   r#   r$   httpr%   r  r&   r'   r(   r)   r*   r+   r,   streamsr-   __all__client_reqrepr5   RuntimeWarningr1   r2   rh   r3   r4   r   r0   	try_firstr  r.   r  r/   r  r;   r<   r=   <module>r     ss      	          7 6 A A ?  8 7    " -	. 		 	`$SM`$
8C=$sCx.()`$H ,6CH%(c]B," ,"^{@ {@| nEOO47G 7 57*t# t#n 	gsC DCg DCN7, 7,r<   