
    bCiy                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJrJrJrJrJrJrJrJrJrJrJrJrJrJr  S SKJrJrJr  S SKJrJ r   SSK!J"r"J#r#  SS	K$J%r%J&r&J'r'J(r(J)r)  SS
K*J+r+J,r,J-r-J.r.  SSK/J0r0  SSK1J2r2J3r3J4r4J5r5J6r6J7r7J8r8  SSK9J:r:  Sr;\(       a  SSK<J=r=   " S S\>5      r? " S S\>5      r@S\\A   S\\\A   \\A\A4   4   4S jrB S'S\\A\A4   S\AS\\A   4S jjrC " S S5      rD " S S5      rE\8" \E\4R                  S9 " S S \55      5       rG " S! S"5      rH\\5\A\A4   rI " S# S$\55      rJ " S% S&5      rKg)(    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxy   )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                       \ rS rSrSrg)r0   B    N__name__
__module____qualname____firstlineno____static_attributes__r7       K/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/multipart.pyr0   r0   B       r>   r0   c                       \ rS rSrSrg)r1   F   r7   Nr8   r7   r>   r?   r1   r1   F   r@   r>   r1   headerreturnc                   ^ S[         S[        4S jmS[         S[        4S jnS[         S[        4U4S jjnS[         S[        4S jnS[         S[        4S jnSR                  [        [        R
                  [        5      5      S	.S
[         S[         S[         4S jjnU (       d  S 0 4$ U R                  S5      tpgT" U5      (       d#  [        R                  " [        U 5      5        S 0 4$ 0 nU(       GaT  UR                  S5      n	SU	;  a#  [        R                  " [        U 5      5        S 0 4$ U	R                  SS5      u  pU
R                  5       R                  5       n
UR                  5       nX;   a#  [        R                  " [        U 5      5        S 0 4$ T" U
5      (       d!  [        R                  " [        U	5      5        M  U" U
5      (       aK  U" U5      (       a  U" USS 5      nGOMT" U5      (       d"  [        R                  " [        U	5      5        GM0  GOU" U
5      (       a^  U" U5      (       a!  UR                  SS5      u  pnU=(       d    SnO"[        R                  " [        U	5      5        GM   [!        XS5      nOSnU" U5      (       a  SnU" USS R                  S5      5      nO[T" U5      (       a  SnOKU(       aD  U SUS    3nU" U5      (       a-  UR                  S5        U" USS R                  S5      5      nSnU(       a#  [        R                  " [        U 5      5        S 0 4$ XU
'   U(       a  GMT  UR                  5       U4$ ! ["         a$    [        R                  " [        U	5      5         GM  f = f)NstringrD   c                 J    [        U 5      =(       a    [        [        U 5      :  $ N)boolr!   setrF   s    r?   is_token+parse_content_disposition.<locals>.is_tokenM   s    F|4V 44r>   c                 8    U S   U S   s=:H  =(       a    S:H  $ s  $ )Nr   "r7   rK   s    r?   	is_quoted,parse_content_disposition.<locals>.is_quotedP   s#    ayF2J--#----r>   c                 J   > T" U 5      =(       a    U R                  S5      S:H  $ )N'   )count)rF   rL   s    r?   
is_rfc5987-parse_content_disposition.<locals>.is_rfc5987S   s!    :FLL$5$::r>   c                 $    U R                  S5      $ )N*)endswithrK   s    r?   is_extended_param4parse_content_disposition.<locals>.is_extended_paramV   s    s##r>   c                     U R                  S5      S-   nU(       d  gU R                  S5      (       a  XS OXS  nUR                  5       $ )NrZ   r   FrO   )findr[   isdigit)rF   pos	substrings      r?   is_continuous_param6parse_content_disposition.<locals>.is_continuous_paramY   sG    kk#"&,ooc&:&:FrNt	  ""r>    )charstextrf   c                :    [         R                  " SU S3SU 5      $ )Nz\\([z])z\1)resub)rg   rf   s     r?   unescape+parse_content_disposition.<locals>.unescape`   s    vvugR(%66r>   ;r   =r   rO   rT   rU   utf-8strictTFz\/)strrI   joinmapri   escaper    splitwarningswarnr0   poplowerstriplstripr1   r   UnicodeDecodeError)rC   rQ   rW   r\   rc   rk   disptypepartsparamsitemkeyvalueencoding_failed_valuerL   s                   @r?   r2   r2   J   s   5 5 5.# .$ .;3 ;4 ;$# $$ $#C #D # -/GGC		44H,I 7s 7c 7c 7 Rx||C(HH1&9:RxF
yy|d?MM5f=>8OZZQ'
iik!=MM5f=>8O}}MM4T:; %% q-e__8>? % s##%  %*[[a%8"U#.w8>?: F q!3!3E!:;% "7!E!H:.V$$IIaL$VAb\%8%8%?@E"F9&ABRxsy %| >>V##5 & 8>?s   ?M )N
Nr   namec                   ^
 SU-  m
U (       d  g T
U ;   a  U T
   $ X;   a  X   $ / n[        U
4S jU R                  5        5       5      n[        U5       HY  u  nu  pVUR                  SS5      u  pxUR	                  S5      (       a  US S nU[        U5      :X  a  UR                  U5        MY    O   U(       d  g SR                  U5      nSU;   a,  UR                  SS5      u  pnU	=(       d    S	n	[        XiS
5      $ U$ )Nz%s*c              3   ^   >#    U  H"  u  pUR                  T5      (       d  M  X4v   M$     g 7frH   )
startswith).0r   r   name_sufs      r?   	<genexpr>/content_disposition_filename.<locals>.<genexpr>   s%      
+9ZSS^^H=ULSL>s   -
-rZ   r   rO   re   rT   rU   ro   rp   )	sorteditems	enumerateru   r[   rq   appendrr   r   )r   r   r~   fnparamsnumr   r   r   tailr   r   s             @r?   r3   r3      s    t|H	V	h	| 
+1<<>
 
 "+8!4C#iiQ'GA}}S!!CRys3xU# "5 %<!&S!!4H*7H5H55r>   c                   ~    \ rS rSrSr      SS jrSS jrS\S   4S jrS\	4S	 jr
S\\S      4S
 jrSS jrSrg)MultipartResponseWrapper   znWrapper around the MultipartReader.

It takes care about
underlying connection and close it when it needs in.
rD   Nc                     Xl         X l        g rH   respstream)selfr   r   s      r?   __init__!MultipartResponseWrapper.__init__   s    
 	r>   c                     U $ rH   r7   r   s    r?   	__aiter__"MultipartResponseWrapper.__aiter__       r>   )r-   r/   c                 T   #    U R                  5       I S h  vN nUc  [        eU$  N7frH   nextStopAsyncIterationr   parts     r?   	__anext__"MultipartResponseWrapper.__anext__   *      YY[ <$$ !   (&(c                 J    U R                   R                  R                  5       $ )z2Returns True when all response data had been read.)r   contentat_eofr   s    r?   r   MultipartResponseWrapper.at_eof   s    yy  ''))r>   c                    #    U R                   R                  5       I Sh  vN nU R                   R                  5       (       a  U R                  5       I Sh  vN   U$  N= N7f)z#Emits next multipart reader object.N)r   r   r   releaser   r   s     r?   r   MultipartResponseWrapper.next   sK      [[%%'';;,,.   ( s!   A"A6A"A A" A"c                 T   #    U R                   R                  5       I Sh  vN   g N7f)zORelease the connection gracefully.

All remaining content is read to the void.
N)r   r   r   s    r?   r    MultipartResponseWrapper.release   s     
 ii!!!s   (&(r   )r   r4   r   r-   rD   N)rD   r   rD   N)r9   r:   r;   r<   __doc__r   r   r   r   rI   r   r   r   r   r=   r7   r>   r?   r   r      si     " 
		2	3* *	%;<	="r>   r   c                      \ rS rSrSrSrSSS.S\SS	S
\S\S\	\   SS4S jjr
S\S    4S jrS\4S jrS\	\   4S jrSS.S\S\4S jjr\4S\S\4S jjrS\S\4S jrS\S\4S jrS\4S jrS+S jrSS.S\	\   S\4S jjrSS.S\	\   S\	\\\4      4S jjrSS.S\	\   S\\\\4      4S  jjrS\4S! jrS"\S\4S# jrS"\S\4S$ jr S"\S\4S% jr!S&\S\4S' jr"\#S\	\   4S( j5       r$\#S\	\   4S) j5       r%S*r&g),r/      z&Multipart reader for single body part.i    mixedNsubtypedefault_charsetboundaryheadersCIMultiDictProxy[str]r   r   r   rD   c                <   X l         Xl        X0l        XPl        SU l        US:H  U l        U R
                  (       a  S OU R                   R                  [        S 5      nUb  [        U5      OS U l	        SU l
        [        5       U l        S U l        SU l        0 U l        g )NF	form-datar   )r   	_boundary_content_default_charset_at_eof_is_form_datagetr   int_length_read_bytesr   _unread_prev_chunk_content_eof_cache)r   r   r   r   r   r   lengths          r?   r   BodyPartReader.__init__  s     ! /$3++1A1A.RV1W&,&8s6{d%*W,0&(r>   c                     U $ rH   r7   r   s    r?   r   BodyPartReader.__aiter__  r   r>   c                 T   #    U R                  5       I S h  vN nUc  [        eU$  N7frH   r   r   s     r?   r   BodyPartReader.__anext__  s(     YY[ <$$ !r   c                 R   #    U R                  5       I S h  vN nU(       d  g U$  N7frH   )readr   s     r?   r   BodyPartReader.next#  s#     YY[  !s   '%'Fdecoder   c                &  #    U R                   (       a  g[        5       nU R                   (       dE  UR                  U R                  U R                  5      I Sh  vN 5        U R                   (       d  ME  U(       a  U R                  U5      $ U$  N57f)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   BodyPartReader.read)  sb      <<{,,KKdoodoo>>? ,,,;;t$$ ?s   ABBB5Bsizec                   #    U R                   (       a  gU R                  (       a  U R                  U5      I Sh  vN nOU R                  U5      I Sh  vN nU =R                  [        U5      -  sl        U R                  U R                  :X  a  SU l         U R                   (       a/  U R                  R                  5       I Sh  vN nSU:X  d   S5       eU$  N N N7f)zGReads 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   BodyPartReader.read_chunk9  s     
 <<<<66t<<E66t<<ECJ&t||+DL<<//11D4EDE =< 2s4   8C CC CA1C CC C C c                   #    U R                   c   S5       e[        XR                   U R                  -
  5      nU R                  R	                  U5      I S h  vN nU R                  R                  5       (       a  SU l        U$  N,7f)Nz(Content-Length required for chunked readT)r   minr   r   r   r   r   )r   r   r   r   s       r?   r   &BodyPartReader._read_chunk_from_lengthO  sq      ||'S)SS'||d.>.>>?
mm((44==!!DL 5s   ABB-Bc           
      4  #    U[        U R                  5      S-   :  d   S5       eU R                  S L nU(       a(  U R                  R	                  U5      I S h  vN U l        U R                  R	                  U5      I S h  vN nU =R
                  [        U R                  R                  5       5      -  sl        U R
                  S:  d   S5       eU R                  c   eU R                  U-   nSU R                  -   nU(       a  UR                  U5      nO;UR                  U[        S[        U R                  5      [        U5      -
  5      5      nUS:  a  [        R                  " 5          [        R                  " S[        S9  U R                  R                  XFS  5        S S S 5        X:  a  U R                  S U U l        U[        U R                  5      U nU(       d  S	U l        U R                  nX0l        U$  GN GN! , (       d  f       Ng= f7f)
NrU   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   r_   maxrv   catch_warningsfilterwarningsDeprecationWarningunread_datar   )r   r   first_chunkr   windowrj   idxresults           r?   r   &BodyPartReader._read_chunk_from_streamY  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((*'';MN))&,7 + z#'#3#3DS#9 3t//037E#!! 1  >. +*s>   AHH'HHC-H/7H&AHH
HHc                   #    U R                   (       a  gU R                  (       a  U R                  R                  5       nO"U R                  R	                  5       I Sh  vN nUR                  U R                  5      (       a\  UR                  S5      nU R                  nU R                  S-   nX#:X  d  X$:X  a#  SU l         U R                  R                  U5        g U$ U R                  R	                  5       I Sh  vN nUR                  U R                  5      (       a  USS nU R                  R                  U5        U$  N NH7f)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   BodyPartReader.readline{  s    <<<<<<'')D//11D??4>>** KK(E~~H NNU2M E$:###D) %;  #mm4466I##DNN33CRyLL	*' 2 7s&   AEEBE<E=AEEc                    #    U R                   (       a  gU R                   (       d7  U R                  U R                  5      I Sh  vN   U R                   (       d  M6  gg N7f)z0Like read(), but reads all the data to the void.N)r   r   r   r   s    r?   r   BodyPartReader.release  s:     <<,,//$//222 ,,,2s   AA AA A )r   r   c                   #    U R                  SS9I Sh  vN nU=(       d    U R                  SS9nUR                  U5      $  N-7f)z;Like read(), but assumes that body part contains text data.Tr   Nro   default)r   get_charsetr   r   r   r   s      r?   rg   BodyPartReader.text  sF     YYdY++ @t///@{{8$$	 ,s   AA.Ac                   #    U R                  SS9I Sh  vN nU(       d  gU=(       d    U R                  SS9n[        [        [        [
        4   [        R                  " UR                  U5      5      5      $  Nd7f)z<Like read(), but assumes that body parts contains JSON data.Tr   Nro   r  )	r   r  r   r	   rq   r   jsonloadsr   r  s      r?   r  BodyPartReader.json  sb     YYdY++@t///@DcNDJJt{{8/D$EFF	 ,s   A<A:A%A<c                  #    U R                  SS9I Sh  vN nU(       d  / $ Ub  UnOU R                  SS9n UR                  5       R                  U5      n[        USUS9$  NM! [         a    [        SU-  5      ef = f7f)zFLike read(), but assumes that body parts contain form urlencoded data.Tr   Nro   r  z'data cannot be decoded with %s encoding)keep_blank_valuesr   )r   r  r  r   r|   
ValueErrorr   )r   r   r   real_encodingdecoded_datas        r?   formBodyPartReader.form  s     YYdY++I$M ,,W,=M	X;;=//>L ""
 	
 , " 	XFVWW	Xs&   BA#"BA% B%A>>Bc                     U R                   $ )z<Returns True if the boundary was reached or False otherwise.r   r   s    r?   r   BodyPartReader.at_eof      ||r>   r   c                     [         U R                  ;   a  U R                  U5      nU R                  (       d%  [        U R                  ;   a  U R                  U5      $ U$ )zuDecodes data.

Decoding is done according the specified Content-Encoding
or Content-Transfer-Encoding headers value.
)r   r   _decode_content_transferr   r   _decode_content)r   r   s     r?   r   BodyPartReader.decode  sK     %4006D!!&6$,,&F''--r>   c                     U R                   R                  [        S5      R                  5       nUS:X  a  U$ US;   a  [	        USS9R                  U5      $ [        SU 35      e)Nre   identity>   gzipdeflateT)r   suppress_deflate_headerunknown content encoding: )r   r   r   ry   r   decompress_syncRuntimeErrorr   r   r   s      r?   r#  BodyPartReader._decode_content  sl    <<##$4b9??Az!K**#!(, od#$
 7zBCCr>   c                    U R                   R                  [        S5      R                  5       nUS:X  a  [        R
                  " U5      $ US:X  a  [        R                  " U5      $ US;   a  U$ [        SR                  U5      5      e)Nre   base64quoted-printable)binary8bit7bitz%unknown content transfer encoding: {})
r   r   r   ry   r0  	b64decodebinasciia2b_qpr,  formatr-  s      r?   r"  'BodyPartReader._decode_content_transfer  s|    <<##$=rBHHJx##D))++??4((33K:AA(K r>   r  c                     U R                   R                  [        S5      n[        U5      nUR                  R                  SU R
                  =(       d    U5      $ )z>Returns charset parameter from Content-Type header or default.re   charset)r   r   r   r"   
parametersr   )r   r  ctypemimetypes       r?   r  BodyPartReader.get_charset  sF      r2!%(""&&y$2G2G2R7SSr>   c                 n    [        U R                  R                  [        5      5      u  p[	        US5      $ )zlReturns name specified in Content-Disposition header.

If the header is missing or malformed, returns None.
r   r2   r   r   r   r3   r   r   r   s      r?   r   BodyPartReader.name  s-     .dll.>.>?R.ST	+FF;;r>   c                 n    [        U R                  R                  [        5      5      u  p[	        US5      $ )zoReturns filename specified in Content-Disposition header.

Returns None if the header is missing or malformed.
filenamerA  rB  s      r?   rE  BodyPartReader.filename  s-     .dll.>.>?R.ST	+FJ??r>   )r   r   r   r   r   r   r   r   r   r   r   r   r   )'r9   r:   r;   r<   r   r   bytesr,   rq   r   r   r   r   r   r   rI   r   r   r   r   r   r   r   rg   r	   r   r  r   r   r  r   r   r#  r"  r  r#   r   rE  r=   r7   r>   r?   r/   r/      s   0J )-)) )) 	) ) "#) 
)0=)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 T3 T3 T <hsm < < @(3- @ @r>   r/   )orderc                   N   ^  \ rS rSrS\S\S\SS4U 4S jjrS\SS4S	 jrS
rU =r	$ )BodyPartReaderPayloadi  r   argskwargsrD   Nc                    > [         TU ]  " U/UQ70 UD6  0 nUR                  b  UR                  US'   UR                  b  UR                  US'   U(       a  U R                  " S0 UD6  g g )Nr   rE  )
attachmentT)superr   r   rE  set_content_disposition)r   r   rK  rL  r   	__class__s        r?   r   BodyPartReaderPayload.__init__	  sg    000!#::!"ZZF6N>>%!&F:((FvF r>   writerc                    #    U R                   nUR                  SS9I S h  vN nU(       aI  UR                  UR                  U5      5      I S h  vN   UR                  SS9I S h  vN nU(       a  MH  g g  NU N( N7f)Ni   )r   )r   r   writer   )r   rS  fieldr   s       r?   rU  BodyPartReaderPayload.write  sj     &&E&22,,u||E2333***66E e 336s9   A=A7.A=A9A='A;(A=5A=9A=;A=r7   )
r9   r:   r;   r<   r/   r   r   rU  r=   __classcell__rQ  s   @r?   rJ  rJ    sA    
Gn 
GS 
GC 
GD 
G7# 7$ 7 7r>   rJ  c                   @   \ rS rSrSr\rSr\r	S\
\\4   S\SS4S jrS\S   4S	 jrS\\S \4      4S
 jr\SSS\4S j5       rS\4S jrS\\S \4      4S jrSS jrS\S \4   4S jrSSS\S \4   4S jrS\4S jrS\4S jrSS jrSS jrSS jr SS jr!Sr"g)r-   i  zMultipart body reader.Nr   r   rD   c                 |   [        U[           5      U l        U R                  R                  S:X  d   S5       eSU R                  R                  ;  a  [        SU[           -  5      eXl        SU R                  5       -   R                  5       U l	        X l
        S U l        S U l        SU l        SU l        / U l        g )N	multipartz!multipart/* content type expectedr   z$boundary missed for Content-Type: %sz--FT)r"   r   	_mimetypetyper<  r  r   _get_boundaryencoder   r   r   
_last_partr   _at_bofr   )r   r   r   s      r?   r   MultipartReader.__init__(  s    '(=>~~""k1V3VV1T^^66669NN  !3!3!55==?/3NR$&r>   r/   c                     U $ rH   r7   r   s    r?   r   MultipartReader.__aiter__9  s	     r>   c                 T   #    U R                  5       I S h  vN nUc  [        eU$  N7frH   r   r   s     r?   r   MultipartReader.__anext__>  r   r   responser4   c                 ^    U R                  X" UR                  UR                  5      5      nU$ )zrConstructs reader instance from HTTP response.

:param response: :class:`~aiohttp.client.ClientResponse` instance
)response_wrapper_clsr   r   )clsrh  objs      r?   from_responseMultipartReader.from_responseF  s3     &&c(**H,<,<=
 
r>   c                     U R                   $ )z@Returns True if the final boundary was reached, false otherwise.r  r   s    r?   r   MultipartReader.at_eofT  r   r>   c                 Z  #    U R                   (       a  gU R                  5       I Sh  vN   U R                  (       a   U R                  5       I Sh  vN   SU l        OU R	                  5       I Sh  vN   U R                   (       a  gU R                  5       I Sh  vN nU R                  c  U R                  R                  S:X  a  [        U[        5      (       a  [        UR                  R                  [        5      5      u  p#UR                  S5      S:X  an  UR                  S5      I Sh  vN n[!        U5      S:  a  [#        S5      eUR%                  5       R'                  5       U l        U R                  5       I Sh  vN nXl        U R                  $  GNs GNM GN0 GN	 Nw N$7f)	z#Emits the next multipart body part.NFr   r   	_charset_       zInvalid default charset)r   _maybe_release_last_partrb  _read_until_first_boundary_read_boundaryfetch_next_partra  r]  r   
isinstancer/   r2   r   r   r   r   r   r,  rz   r   r   )r   r   r   r   r;  s        r?   r   MultipartReader.nextX  sF    
 <<++---<<11333 DL%%'''<<))++ OO#&&+54001$,,2B2BCV2WXIAzz&![0 !% 33w<"$&'@AA(/(>(>(@%!11335 	.3 ( , 4 4sk   &F+F(F+FF+1F!2)F+F$BF+/F'0AF+F)F+F+!F+$F+'F+)F+c                    #    U R                   (       dH  U R                  5       I Sh  vN nUc  gUR                  5       I Sh  vN   U R                   (       d  MG  gg N5 N7f)z=Reads all the body parts to the void till the final boundary.N)r   r   r   r   s     r?   r   MultipartReader.release{  sD     ,,$D|,,.  	 ,,,$ !s'   %A!AA!AA!A!A!c                 `   #    U R                  5       I Sh  vN nU R                  U5      $  N7f)z"Returns the next body part reader.N)_read_headers_get_part_reader)r   r   s     r?   rx  MultipartReader.fetch_next_part  s.      **,,$$W-- -s   .,.r   c                 t   UR                  [        S5      n[        U5      nUR                  S:X  aC  U R                  c  [        U 5      " XR
                  5      $ U R	                  XR
                  5      $ U R                  U R                  UU R
                  U R                  R                  U R                  S9$ )zDispatches the response by the `Content-Type` header.

Returns a suitable reader instance.

:param dict headers: Response headers
re   r\  r   )r   r   r"   r^  multipart_reader_clsr   part_reader_clsr   r]  r   r   )r   r   r=  r>  s       r?   r   MultipartReader._get_part_reader  s     L"-!%(==K'((0Dz'==99,,WmmDD''.. $ 5 5 (  r>   c                 r    U R                   R                  S   n[        U5      S:  a  [        SU-  5      eU$ )Nr   rB   z&boundary %r is too long (70 chars max))r]  r<  r   r  )r   r   s     r?   r_  MultipartReader._get_boundary  s8    >>,,Z8x=2EPQQr>   c                    #    U R                   (       a  U R                   R                  5       $ U R                  R                  5       I S h  vN $  N7frH   )r   rx   r   r   r   s    r?   	_readlineMultipartReader._readline  s8     <<<<##%%]]++----s   A	AAAc                    #     U R                  5       I S h  vN nUS:X  a  [        SU R                  -  5      eUR                  5       nXR                  :X  a  g XR                  S-   :X  a  SU l        g Mr   N^7f)NTr>   z#Could not find starting boundary %rr  )r  r  r   r  r   r   r   s     r?   rv  *MultipartReader._read_until_first_boundary  sr     ..**E| 9T^^L  LLNE&..500# *s   A8A6AA8c                   #    U R                  5       I S h  vN R                  5       nXR                  :X  a  g XR                  S-   :X  ay  SU l        U R                  5       I S h  vN nU R                  5       I S h  vN nUS S S:X  a  U R                  R                  U5        g U R                  R                  X2/5        g [        SU< SU R                  < 35      e N N} Ng7f)Nr  TrU   zInvalid boundary z, expected )r  r  r   r   r   r   r   r  )r   r   epiloguer  s       r?   rw  MultipartReader._read_boundary  s     ~~''//1NN"nnu,,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                    #    S/n U R                   R                  5       I S h  vN nUR                  5       nUR                  U5        U(       d  OMM  [	        5       nUR                  U5      u  pEU$  NN7f)Nr>   )r   r   rz   r   r$   parse_headers)r   linesr   parserr   raw_headerss         r?   r~  MultipartReader._read_headers  sl     --0022EKKMELL  %33E: 3s   "A5A3AA5c                   #    U R                   bx  U R                   R                  5       (       d"  U R                   R                  5       I Sh  vN   U R                  R	                  U R                   R                  5        SU l         gg N<7f)z8Ensures that the last read body part is read completely.N)ra  r   r   r   r   r   s    r?   ru  (MultipartReader._maybe_release_last_part  sc     ??&??))++oo--///LL 7 78"DO	 '/s   A
BB	=B)	rb  r   r   r   r   ra  r]  r   r   r   )rD   r   )#r9   r:   r;   r<   r   r   rj  r  r/   r  r   rq   r,   r   r   r   r   r   r   classmethodrm  rI   r   r   r   rx  r  r_  rG  r  rv  rw  r~  ru  r=   r7   r>   r?   r-   r-     s)     4  $O'S 1 'L 'T '"	'	(
	%)>9:	; " 
"  !	%)>9:	;!F!.	 .0	1.( 
 .0	14s . .
Y.
#r>   r-   c                     ^  \ rS rSrSrS S\S\\   SS4U 4S jjjrS!S jrS	\\	\
      S
\\
   S\\   SS4S jrS\\   4S jrS\4S jrS\4S jr\R*                  " S5      r\R*                  " S5      r\S\4S j5       r\S\4S j5       rS"S\S\\\\4      S\4S jjrS\S\4S jr S"S\S\\\\4      S\4S jjr  S"S\!\"\#\\4      \\\4   4   S\\\\4      S\4S jjr$\S\\   4S j5       r%S#S\S\SS4S jjr&Sr'U =r($ )$r.   i  zMultipart body writer.Nr   r   rD   c                   > Ub  UO[         R                  " 5       R                  n UR                  S5      U l        SU SU R                   3n[        TU ]%  S US9  / U l
        US:H  U l        g ! [
         a    [        S5      S ef = f)Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_typer   )uuiduuid4hexr`  r   UnicodeEncodeErrorr  _boundary_valuerO  r   _partsr   )r   r   r   r=  rQ  s       r?   r   MultipartWriter.__init__  s    '389I9I	S%__W5DN WI[1E1E0FGE2#%$3 " 	SGHdR	Ss   A/ /Bc                     U $ rH   r7   r   s    r?   	__enter__MultipartWriter.__enter__  r   r>   exc_typeexc_valexc_tbc                     g rH   r7   )r   r  r  r  s       r?   __exit__MultipartWriter.__exit__  s     	r>   c                 ,    [        U R                  5      $ rH   )iterr  r   s    r?   __iter__MultipartWriter.__iter__  s    DKK  r>   c                 ,    [        U R                  5      $ rH   )r   r  r   s    r?   __len__MultipartWriter.__len__  s    4;;r>   c                     g)NTr7   r   s    r?   __bool__MultipartWriter.__bool__  s    r>   s   \A[!#$%&'*+\-.^_`|~\w]+\Zs   [\x00-\x08\x0A-\x1F\x7F]c                 `   U R                   n[        R                  " U R                  U5      (       a  UR	                  S5      $ [        R
                  " U R                  U5      (       a  [        S5      eUR                  SS5      nUR                  SS5      nSUR	                  S5      -   S-   $ )zjWrap boundary parameter value in quotes, if necessary.

Reads self.boundary and returns a unicode string.
r  z*boundary value contains invalid characters   \s   \\   "s   \"rP   )	r   ri   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr  replace)r   r   quoted_value_contents      r?   r  MultipartWriter._boundary_value  s    & 88D++U33<<((99T44e<<IJJ  %}}UG<3;;D&I)0099C??r>   c                 8    U R                   R                  S5      $ )Nr  )r   r   r   s    r?   r   MultipartWriter.boundary9  s    ~~$$W--r>   rl  r   c                    Uc
  [        5       n[        U[        5      (       a,  UR                  R	                  U5        U R                  U5      $  [        XS9nU R                  U5      $ ! [         a    [        SU-  5      ef = f)Nr   zCannot create payload from %r)	r   ry  r(   r   updateappend_payloadr*   r&   	TypeError)r   rl  r   payloads       r?   r   MultipartWriter.append=  s    ?!mGc7##KKw'&&s++4%c; **733  G ?# EFFGs   	A* *Br  c                    SnSnU R                   (       ap  [        [        [        1UR                  R                  5       -  (       a   e[        UR                  ;  a(  S[        U R                  5       3nUR                  SUS9  OUR                  R                  [        S5      R                  5       nU(       a  US;  a  [        SU 35      eUS:X  a  SnUR                  R                  [        S5      R                  5       nUS	;  a  [        S
U 35      eUS:X  a  SnUR                  nUb*  U(       d#  U(       d  [        U5      UR                  [        '   U R                  R                  XU45        U$ )z)Adds a new body part to multipart writer.Nzsection-r   )r   re   )r(  r'  r&  r*  r&  )re   r0  r1  r2  z#unknown content transfer encoding: r2  )r   r   r   r   r   keysr   r   r  rP  r   ry   r,  r   rq   r   )r   r  r   te_encodingr   r   s         r?   r  MultipartWriter.append_payloadL  sT   "&%) &~7PQ//&&()) #'//9!#dkk"2!34//$/G **+;R@FFHHH,KK"%?z#JKK:% "//--.GLRRTK"NN"%H#VWWh&" <<D[25d)/G{;<r>   c                 L    Uc
  [        5       nU R                  [        XS95      $ )zHelper to append JSON part.r  )r   r  r%   )r   rl  r   s      r?   append_jsonMultipartWriter.append_jsonr  s&     ?!mG"";s#DEEr>   c                     [        U[        [        45      (       d   eUc
  [        5       n[        U[        5      (       a  [	        UR                  5       5      n[        USS9nU R                  [        X2SS95      $ )z&Helper to append form urlencoded part.T)doseqz!application/x-www-form-urlencoded)r   r  )	ry  r   r   r   listr   r   r  r)   )r   rl  r   r   s       r?   append_formMultipartWriter.append_form{  sr     #'23333?!mGc7##syy{#CD)""4W
 	
r>   c                 F   SnU R                    Hp  u  p#nU(       d  U(       d  UR                  c    gU[        S[        U R                  5      -   S-   UR                  -   [        UR
                  5      -   S-   5      -  nMr     US[        U R                  5      -   S-   -  nU$ )zSize of the payload.r   NrU      )r  r   r   r   r   _binary_headers)r   totalr   r   r  s        r?   r   MultipartWriter.size  s     +/;;'DK;$))*;Sdnn%& )) d**+	,
  E	 ,7 	S((1,,r>   rS  close_boundaryc                 .  #    U R                    GH@  u  p4nU R                  (       a/  [        UR                  ;   d   eSUR                  [           ;   d   eUR	                  SU R
                  -   S-   5      I Sh  vN   UR	                  UR                  5      I Sh  vN   U(       d  U(       am  [        U5      nU(       a  UR                  U5        U(       a  UR                  U5        UR	                  U5      I Sh  vN   UR                  5       I Sh  vN   OUR	                  U5      I Sh  vN   UR	                  S5      I Sh  vN   GMC     U(       a*  UR	                  SU R
                  -   S-   5      I Sh  vN   gg GN N N Nu N] NF N7f)zWrite body.zname=r  r   Ns   --
)r  r   r   r   rU  r   r  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r   rS  r  r   r   r  ws          r?   rU  MultipartWriter.write  s?    +/;;'DK!!*dll:::$,,/B"CCCC,,ut~~5?@@@,,t33444;*62((2%%k2jjm##kkm##jj(((,,w''') ,7, ,,ut~~5	ABBB ! A4 $#(' Cs   A8F:F;"FF	A!F?F FFF1F2F
F4F?F F	FFFFFF)r   r   r  )r   N)rD   r.   rH   )T))r9   r:   r;   r<   r   rq   r   r   r  r   BaseExceptionr   r  r
   _Partr  r   r  rI   r  ri   compiler  r  propertyr  r   r   r   r(   r   r  r  r   r   r   r  r   rU  r=   rX  rY  s   @r?   r.   r.     s    4 4# 4RV 4 4$4./ -( '	
 
!(5/ !   $  $AB!#,H!I@ @ @> .# . .4# 4c1B(C 4w 4$g $' $N @DFF!)'#s(*;!<F	F 04
8E#s(O,gc3h.??@
 '#s(+,
 
	
* hsm  &C# Ct Ct C Cr>   r.   c                       \ rS rSrS\SS4S jrS\SS4S jrS\R                  4S\S	\
SS4S
 jjrSS jrS\SS4S jrSrg)r  i  rS  rD   Nc                 :    Xl         S U l        S U l        S U l        g rH   )_writer	_encoding	_compress_encoding_buffer)r   rS  s     r?   r   MultipartPayloadWriter.__init__  s    (,3759r>   r   c                 X    US:X  a  Xl         [        5       U l        g US:X  a  SU l         g g )Nr0  r1  )r  r   r  )r   r   s     r?   r  &MultipartPayloadWriter.enable_encoding  s.    x%N$-KD!++/DN ,r>   r(  strategyc                 $    [        USUS9U l        g )NT)r   r)  r  )r   r  )r   r   r  s      r?   r  )MultipartPayloadWriter.enable_compression  s     ($(
r>   c                 x  #    U R                   bA  U R                   R                  5       nU(       a   S U l         U R                  U5      I S h  vN   U R                  S:X  aT  U R                  (       aB  U R
                  R                  [        R                  " U R                  5      5      I S h  vN   g g g  Ni N	7f)Nr0  )r  flushrU  r  r  r  r0  	b64encoder  s     r?   r   MultipartPayloadWriter.write_eof  s     >>%NN((*E!%jj'''>>X%$$ll(()9)9$:O:O)PQQQ % & ( Rs%   A
B:B6A!B:.B8/B:8B:r   c                   #    U R                   b2  U(       a+  U R                   R                  U5      I S h  vN nU(       d  g U R                  S:X  a  U R                  nUc   eUR	                  U5        U(       am  [        [        U5      S5      u  p4US US-   X#S-  S  soPl        U(       a:  [        R                  " U5      nU R                  R                  U5      I S h  vN   g g g U R                  S:X  a8  U R                  R                  [        R                  " U5      5      I S h  vN   g U R                  R                  U5      I S h  vN   g  GN  Nv N. N7f)Nr0  r   r1  )r  compressr  r  r   divmodr   r0  r  r  rU  r6  b2a_qp)r   r   bufdivmod	enc_chunkb64chunks          r?   rU  MultipartPayloadWriter.write  s    >>%"nn55e<<>>X%''C?"?JJu!#c(A.47	#'NCa	N0	0%//	:H,,,,X666   ^^11,,$$X__U%;<<<,,$$U+++% = 7<+sG   3EEB+E!E"A	E+E,#EEEEEE)r  r  r  r  r   )r9   r:   r;   r<   r   r   rq   r  zlibZ_DEFAULT_STRATEGYr   r  r  rG  rU  r=   r7   r>   r?   r  r    sk    :s :t :0 0 0 (9P9P

36
	
	R, ,4 ,r>   r  )rE  )Lr0  r6  r  ri   r  rv   r  collectionsr   typesr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   urllib.parser   r   r   	multidictr   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_reqrepr4   RuntimeWarningr0   r1   rq   r2   r3   r   r/   	try_firstrJ  r-   r  r.   r  r7   r>   r?   <module>r     sp      	          7 6 3 ?  8 7    " -	. 		 	`$SM`$
8C=$sCx.()`$H ,6CH%(c]B," ,"^G@ G@T nEOO47G 7 57*J# J#Z 	gsC PCg PCf7, 7,r>   