
    5pj                     B   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rS SKJ	r	  S SK
JrJrJrJr  S SKJr  S SK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  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-J.r.  SSK/J0r0  SSK1J2r2  SSK3J4r4  SSK5J6r6J7r7J8r8J9r9J:r:J;r;J<r<  SSK=J>r>  \R~                  S:  a  S SKJ@r@  O\" SSS9r@\R~                  S:  a  S SK
JArA  O	\\B\CSS4   rA\" S\AS9rDSrE\(       a  SSKFJGrG   " S S\H5      rI " S  S!\H5      rJS"\KS-  S#\L\KS-  \M\K\K4   4   4S$ jrN S4S%\\K\K4   S&\KS#\KS-  4S' jjrO " S( S)5      rP " S* S5      rQ\<" \Q\8R                  S+9 " S, S-\95      5       rS " S. S/5      rT\L\9\K\K4   rU " S0 S1\95      rV " S2 S35      rWg)5    N)deque)AsyncIteratorIteratorMappingSequence)TracebackType)TYPE_CHECKINGAnyTypeVarUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxy   )AbstractStreamWriter)ZLibCompressorZLibDecompressor)CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARDEFAULT_CHUNK_SIZETOKENparse_mimetypereify)HeadersParser)BadHttpMessage)internal_logger)JsonPayloadLookupErrorOrderPayloadStringPayloadget_payloadpayload_type)StreamReader)      )Selfr.   BodyPartReader)bound)r,      )Bufferzmemoryview[int]zmemoryview[bytes]_Buffer)MultipartReaderMultipartWriterr/   BadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec                       \ rS rSrSrg)r6   D    N__name__
__module____qualname____firstlineno____static_attributes__r=       M/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/aiohttp/multipart.pyr6   r6   D       rD   r6   c                       \ rS rSrSrg)r7   H   r=   Nr>   r=   rD   rE   r7   r7   H   rF   rD   r7   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pgUR                  5       nT" U5      (       d#  [        R                  " [        U 5      5        S 0 4$ 0 nU(       Ga  UR                  S5      n	U	(       d!  [        R                  " [        U 5      5        MA  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        GM  U" U
5      (       aK  U" U5      (       a  U" USS 5      nGO]T" U5      (       d"  [        R                  " [        U	5      5        GMY  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R)                  5       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M  UR                  5       U4$ ! ["        R$                  [&        4 a$    [        R                  " [        U	5      5         GM  f = f)NstringrJ   c                 J    [        U 5      =(       a    [        [        U 5      :  $ N)boolr   setrL   s    rE   is_token+parse_content_disposition.<locals>.is_tokenO   s    F|4V 44rD   c                 b    [        U 5      S:  =(       a    U S   U S   s=:H  =(       a    S:H  $ s  $ )N   r   ")lenrQ   s    rE   	is_quoted,parse_content_disposition.<locals>.is_quotedR   s1    6{aBF1I$B$Bs$BB$BBrD   c                 J   > T" U 5      =(       a    U R                  S5      S:H  $ )N'rU   )count)rL   rR   s    rE   
is_rfc5987-parse_content_disposition.<locals>.is_rfc5987U   s!    :FLL$5$::rD   c                 $    U R                  S5      $ )N*)endswithrQ   s    rE   is_extended_param4parse_content_disposition.<locals>.is_extended_paramX   s    s##rD   c                     U R                  S5      S-   nU(       d  gU R                  S5      (       a  XS OXS  nUR                  5       $ )Nra   r   FrV   )findrb   isdigit)rL   pos	substrings      rE   is_continuous_param6parse_content_disposition.<locals>.is_continuous_param[   sG    kk#"&,ooc&:&:FrNt	  ""rD    )charstextrm   c                :    [         R                  " SU S3SU 5      $ )Nz\\([z])z\1)resub)rn   rm   s     rE   unescape+parse_content_disposition.<locals>.unescapeb   s    vvugR(%66rD   ;r   =r   rV   r\   rU   utf-8strictTFz\/)strrO   joinmaprp   escaper   splitstripwarningswarnr6   poplowerlstripr7   r   builtinsr%   UnicodeDecodeErrorrstrip)rI   rY   r^   rc   rj   rr   disptypepartsparamsitemkeyvalueencoding_failed	rstripped_valuerR   s                    @rE   r8   r8   L   s_   5 5 5C# C$ C;3 ;4 ;$# $$ $#C #D # -/GGC		44H,I 7s 7c 7c 7 Rx ||C(H~~HH1&9:RxF
yy|MM5f=>d?MM5f=>8OZZQ'
iik!=MM5f=>8O}}MM4T:; %% q-e__8>? % s##%  %*[[a%8"U#.w8>?: FI## 1R!7!7!>?% "7!E!H:.V$$IIaL$VAb\%8%8%?@E"F9&ABRxsI %L >>V##= ((*<=  8>?s   8N& &9O$#O$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$ ! [        R                  [        4 a     g f = f)Nz%s*c              3   ^   >#    U  H"  u  pUR                  T5      (       d  M  X4v   M$     g 7frN   )
startswith).0r   r   name_sufs      rE   	<genexpr>/content_disposition_filename.<locals>.<genexpr>   s%      
+9ZSS^^H=ULSL>s   -
-ra   r   rV   rl   r\   rU   rv   rw   )sorteditems	enumerater|   rb   rx   appendry   r   r   r%   r   )r   r   r   fnparamsnumr   r   r   tailr   r   s             @rE   r9   r9      s+    t|H	V	h	| 
+1<<>
 
 "+8!4C#iiQ'GA}}S!!CRys3xU# "5 %<!&S!!4H*7Hu99  ((*<= 
 s   0C> >DD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   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.
rJ   Nc                     Xl         X l        g rN   respstream)selfr   r   s      rE   __init__!MultipartResponseWrapper.__init__   s    
 	rD   c                     U $ rN   r=   r   s    rE   	__aiter__"MultipartResponseWrapper.__aiter__       rD   )r4   r/   c                 T   #    U R                  5       I S h  vN nUc  [        eU$  N7frN   nextStopAsyncIterationr   parts     rE   	__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    rE   r   MultipartResponseWrapper.at_eof   s    yy  ''))rD   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     rE   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    rE   r    MultipartResponseWrapper.release  s     
 ii!!!s   (&(r   )r   r:   r   r4   rJ   N)rJ   r   rJ   N)r?   r@   rA   rB   __doc__r   r   r   r   rO   r   r   r   rC   r=   rD   rE   r   r      si     " 
		2	3* *	2	3d	:"rD   r   c                      \ rS rSrSrSrSS\\R                  \	S.S\
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\
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S3S jrSS .S!\S-  S\4S" jjrSS .S!\S-  S\\\4   S-  4S# jjrSS .S!\S-  S\ \!\\4      4S$ jjr"S\4S% jr#S&\$S\$\
-  4S' 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&\$S\$\
-  4S- jr,S.\S\4S/ jr-\.S\S-  4S0 j5       r/\.S\S-  4S1 j5       r0S2r1g)4r/   i  z&Multipart reader for single body part.i    mixedN)subtypedefault_charsetmax_decompress_sizeclient_max_sizemax_size_error_clsboundaryheadersCIMultiDictProxy[str]r   r   r   r   r   r   rJ   c                   X l         Xl        [        U5      S-   U l        X0l        XPl        SU l        US:H  U l        U R                  (       a  S OU R                   R                  [        S 5      n	U	b9  U	R                  5       (       a  U	R                  5       (       d  [        SU	< 35      eU	b  [        U	5      OS U l        SU l        [!        5       U l        S U l        SU l        0 U l        X`l        Xpl        Xl        g )NrU   F	form-datazinvalid Content-Length: r   )r   	_boundaryrX   _boundary_len_content_default_charset_at_eof_is_form_datagetr   isasciirg   
ValueErrorint_length_read_bytesr   _unread_prev_chunk_content_eof_cache_max_decompress_size_client_max_size_max_size_error_cls)
r   r   r   r   r   r   r   r   r   lengths
             rE   r   BodyPartReader.__init__  s     ! ]Q. /$3++1A1A.RV1Wv~~'7'7FNN<L<L 7zBCC&,&8s6{d%*W)-&($7! /#5 rD   r   c                     U $ rN   r=   r   s    rE   r   BodyPartReader.__aiter__9  r   rD   c                 T   #    U R                  5       I S h  vN nUc  [        eU$  N7frN   r   r   s     rE   r   BodyPartReader.__anext__<  s(     YY[ <$$ !r   c                 R   #    U R                  5       I S h  vN nU(       d  g U$  N7frN   )readr   s     rE   r   BodyPartReader.nextB  s#     YY[  !s   '%'Fdecoder   c                L  #    U R                   (       a  g[        5       nU R                   (       dy  UR                  U R                  U R                  5      I Sh  vN 5        [        U5      U R                  :  a  U R                  U R                  5      eU R                   (       d  My  U(       ak  [        5       nU R                  U5        Sh  vN nUR                  U5        [        U5      U R                  :  d  M5  U R                  U R                  5      eU$  N NO
 U$ 7f)zReads body part data.

decode: Decodes data following by encoding
        method from Content-Encoding header. If it missed
        data remains untouched
rD   N)	r   	bytearrayextend
read_chunk
chunk_sizerX   r   r   decode_iter)r   r   datadecoded_datads        rE   r   BodyPartReader.readH  s      <<{,,KKdoodoo>>?4y4000..t/D/DEE ,,, $;L++D1 Ja##A&|$t'<'<<2243H3HII ?
J1  sC   AD$DAD$)"D$D!DD!)D$ D$D!!D$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                  R                  [        5      nU(       Ga@  UR                  5       S:X  Ga+  SR                  UR                  5       5      n[        U5      S-  nUS:w  a  U R                  5       (       d  SU-
  nSnU R                  (       a,  U R                  SU nU R                  [        U5      S U l        [        U5      U:w  a1  XpR                  R                  S[        U5      -
  5      I Sh  vN -  nU(       d  SU l         USR                  UR                  5       5      -  nX'-  n[        U5      S-  nUS:w  a  U R                  5       (       d  M  U =R                  [        U5      -  sl        U R                  U R                  :X  a  SU l         U R                   (       a1  U R                  R!                  5       I Sh  vN S:w  a  [#        S5      eU$  GN	 GN N N7f)	zGReads body part content chunk of the specified size.

size: chunk size
rD   Nbase64   r   T   
z3Reader did not read all the data or it is malformed)r   r   _read_chunk_from_length_read_chunk_from_streamr   r   r   r   ry   r|   rX   r   r   r   r   r   readliner   )r   r   chunkr   stripped_chunk	remainderover_chunk_size
over_chunks           rE   r   BodyPartReader.read_chunk_  s    
 <<<<66t<<E66t<<E <<##$=>(H4 XXekkm4NN+a/Iq."#i- 
##!%!1!12B?!CJ'+'7'7J8I'JD$z?o5(:(:1s:;N(O"OOJ!#'DL#((:+;+;+=">>#/!3	! q.$ 	CJ&t||+DL<<$--"8"8"::gERSSE =<$ #P ;sN   8IIIIDII	A#I A-I-I.II	II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       rE   r   &BodyPartReader._read_chunk_from_length  sq      ||'S)SS'||d.>.>>?
mm((44==!!DL 5s   ABB-Bc           
      ,  #    XR                   :  d   S5       eU R                  S L nU(       a+  SU R                  R                  U5      I S h  vN -   U l        Sn[	        U5      U R                   :  a  X0R                  R                  U5      I S h  vN -  nU =R
                  [        U R                  R                  5       5      -  sl        U R
                  S:  a  [        S5      eU R
                  (       a  O[	        U5      U R                   :  a  M  [	        U5      U:  a"  U R                  R                  X1S  5        US U n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        U R                  S U U l        U[	        U R                  5      U nU(       d  S	U l        U R                  U(       a  SOSS  nX0l        U$  GN0 GN! , (       d  f       Nn= f7f)
Nz<Chunk size must be greater or equal than boundary length + 2r   rD   rU   zReading after EOFr   ignore)categoryT)r   r   r   r   rX   r   r   r   r   unread_datar   rf   maxr~   catch_warningsfilterwarningsDeprecationWarningr   )r   r   first_chunkr  windowrq   idxresults           rE   r   &BodyPartReader._read_chunk_from_stream  s/     &&&	JI	J&&&$.&t}}/A/A$/G)GGD %j4---==--d333ET]]%9%9%;!<<  1$ !455   %j4--- u:MM%%eEl3%4LE+++!!E)&++c"C++c3q#d.>.>*?#c(*J#KLC!8((*'';MN))&,7 +  $//5D3t//037E#!!{!";< E *H 4& +*sF   AJI=AJJ BJCJ$7JA#J J
JJ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.rD   Nr      --T)	r   r   popleftr   r   r   r   r   r   )r   linesliner   last_boundary	next_lines         rE   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    rE   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   Nrv   default)r   get_charsetr   r   r   r   s      rE   rn   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   Nrv   r#  )	r   r%  r   dictrx   r
   jsonloadsr   r&  s      rE   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   Nrv   r#  z'data cannot be decoded with %s encoding)keep_blank_valuesr   )r   r%  r   r   r   r   r   )r   r   r   real_encodingr   s        rE   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    rE   r   BodyPartReader.at_eof
      ||rD   r   c                 P    [         U R                  ;   a  U R                  U5      $ U$ )z>Apply Content-Transfer-Encoding decoding if header is present.)r   r   _decode_content_transfer)r   r   s     rE    _apply_content_transfer_decoding/BodyPartReader._apply_content_transfer_decoding  s$    $40066rD   c                 X    U R                   (       + =(       a    [        U R                  ;   $ )z5Check if Content-Encoding decoding should be applied.)r   r   r   r   s    rE   _needs_content_decoding&BodyPartReader._needs_content_decoding  s"     %%%J*:dll*JJrD   c                 t    U R                  U5      nU R                  5       (       a  U R                  U5      $ U$ )zDecodes data synchronously.

Decodes data according the specified Content-Encoding
or Content-Transfer-Encoding headers value.

Note: For large payloads, consider using decode_iter() instead
to avoid blocking the event loop during decompression.
)r8  r;  _decode_content)r   r   decodeds      rE   r   BodyPartReader.decode  s9     77=''))''00rD   c                   #    U R                  U5      nU R                  5       (       a!  U R                  U5        Sh  vN nU7v   M  U7v   g N
 g7f)zAsync generator that yields decoded data chunks.

Decodes data according the specified Content-Encoding
or Content-Transfer-Encoding headers value.

This method offloads decompression to an executor for large payloads
to avoid blocking the event loop.
N)r8  r;  _decode_content_async)r   r   r?  r   s       rE   r   BodyPartReader.decode_iter'  sM      77=''))55g> aM>s&   8AAAAAAAc                     U R                   R                  [        S5      R                  5       nUS:X  a  U$ US;   a!  [	        USS9R                  XR                  S9$ [        SU 35      e)Nrl   identity>   gzipdeflateTr   suppress_deflate_header
max_lengthunknown content encoding: )r   r   r   r   r   decompress_syncr   RuntimeErrorr   r   r   s      rE   r>  BodyPartReader._decode_content7  su    <<##$4b9??Az!K**#!(, od/H/HoIJ
 7zBCCrD   c                  #    U R                   R                  [        S5      R                  5       nUS:X  a  U7v   g US;   ay  [	        USS9nUR                  XR                  S9I S h  vN 7v   UR                  (       a9  UR                  SU R                  S9I S h  vN 7v   UR                  (       a  M8  g g [        SU 35      e N` N,7f)	Nrl   rE  >   rF  rG  TrH  rJ  rD   rL  )	r   r   r   r   r   
decompressr   data_availablerN  )r   r   r   r   s       rE   rB  $BodyPartReader._decode_content_asyncC  s      <<##$4b9??Az!J,, !(,A T6O6OPPP""LL9R9RLSSS """ !;H:FGG	 QSs*   A'C)C
*5CC C:CC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U 35      e)Nrl   r   quoted-printable)binary8bit7bit#unknown content transfer encoding: )	r   r   r   r   r   	b64decodebinasciia2b_qprN  rO  s      rE   r7  'BodyPartReader._decode_content_transferT  st    <<##$=rBHHJx##D))++??4((33K!DXJOPPrD   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.rl   charset)r   r   r   r   
parametersr   )r   r$  ctypemimetypes       rE   r%  BodyPartReader.get_charset`  sF      r2!%(""&&y$2G2G2R7SSrD   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   r8   r   r   r   r9   r   r   r   s      rE   r   BodyPartReader.namef  s-     .dll.>.>?R.ST	+FF;;rD   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.
filenamerf  rg  s      rE   rj  BodyPartReader.filenameo  s-     .dll.>.>?R.ST	+FJ??rD   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )2r?   r@   rA   rB   r   r   r   sysmaxsizer   bytesr+   rx   r   type	Exceptionr   r.   r   r   r   rO   r   r   r   r   r   r   rn   r)  r
   r*  listtupler0  r   r3   r8  r;  r   r   r   r>  rB  r7  r%  r    r   rj  rC   r=   rD   rE   r/   r/     s   0J &*#5"{{.8"6"6 )"6 	"6 "6 t"6 !"6 "6 !O"6 
"6H   EDL  ,1 D U . ,6 *S *% *X# % +# +% +Z :3 48 %cDj %C % 48 GcDj GDcNT<Q G 48 
cDj 
DsCx<Q 
( W 5 K K
7 w g -%2P  
DG 
D% 
DHH	w	'H"
QW 
Q5 
QT3 T3 T <cDj < < @#* @ @rD   )orderc                      ^  \ rS rSr% \\S'   S\S\S\SS4U 4S jjrSS	\S
\S\4S jjr	SS	\S
\S\
4S jjrS\SS4S jrSrU =r$ )BodyPartReaderPayloadiy  r   r   argskwargsrJ   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   rj  )
attachmentT)superr   r   rj  set_content_disposition)r   r   rv  rw  r   	__class__s        rE   r   BodyPartReaderPayload.__init__~  sg    000!#::!"ZZF6N>>%!&F:((FvF rD   r   errorsc                     [        S5      e)NzUnable to decode.	TypeErrorr   r   r~  s      rE   r   BodyPartReaderPayload.decode  s    +,,rD   c                     #    [        S5      e7f)a*  Raises TypeError as body parts should be consumed via write().

This is intentional: BodyPartReader payloads are designed for streaming
large data (potentially gigabytes) and must be consumed only once via
the write() method to avoid memory exhaustion. They cannot be buffered
in memory for reuse.
z:Unable to read body part as bytes. Use write() to consume.r  r  s      rE   as_bytesBodyPartReaderPayload.as_bytes  s      TUUs   writerc                 ,  #    U R                   nUR                  [        S9I S h  vN =n(       a5  UR                  U5        S h  vN nUR	                  U5      I S h  vN   M$  g  NA N" N
 UR                  [        S9I S h  vN  =n(       a  Mb  g 7f)N)r   )r   r   r   r   write)r   r  fieldr  r   s        rE   r  BodyPartReaderPayload.write  s     "--3E-FFFeF ,,U3 &all1o%% GF&% 4 #--3E-FFFFeFFsW   #BA'BA-A)A-
BA+ B)A-+B-BBBBr=   rv   rw   )r?   r@   rA   rB   r/   __annotations__r
   r   rx   r   rn  r  r   r  rC   __classcell__r|  s   @rE   ru  ru  y  s    
Gn 
GS 
GC 
GD 
G-s -c - -Vs Vc VQV V&"6 &4 & &rD   ru  c                      \ rS rSr% Sr\rSr\S    S-  \	S'   \
r\R                  SS\S.S\\\4   S	\S
\S\S\S\\   SS4S jjrS\S\4S jrS\S \
4   S-  4S jr\SSS\4S j5       rS\4S jrS\S \
4   S-  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)%r4   i  zMultipart body reader.Nmultipart_reader_clsi     r   max_field_sizemax_headersr   r   r   r   r  r  r   rJ   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	        X0l
        X l        S U l        S U l        X@l        XPl        X`l        SU l        SU l        / U l        g )N	multipartz!multipart/* content type expectedr   z$boundary missed for Content-Type: %s--FT)r   r   	_mimetypero  ra  r   r   _get_boundaryencoder   r   r   r   
_last_part_max_field_size_max_headersr   r   _at_bofr   )r   r   r   r   r  r  r   s          rE   r   MultipartReader.__init__  s     ((=>~~""k1V3VV1T^^66669NN  !3!3!55==? /,0CG-'#5 $&rD   r   c                     U $ rN   r=   r   s    rE   r   MultipartReader.__aiter__  r   rD   c                 T   #    U R                  5       I S h  vN nUc  [        eU$  N7frN   r   r   s     rE   r   MultipartReader.__anext__  r   r   responser:   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   )clsr  objs      rE   from_responseMultipartReader.from_response  s3     &&c(**H,<,<=
 
rD   c                     U R                   $ )z@Returns True if the final boundary was reached, false otherwise.r3  r   s    rE   r   MultipartReader.at_eof  r5  rD   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_partr  _read_until_first_boundary_read_boundaryfetch_next_partr  r  r   
isinstancer/   r8   r   r   r   r   rX   rN  r}   r   r   )r   r   r   r   r`  s        rE   r   MultipartReader.next  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     rE   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     rE   r  MultipartReader.fetch_next_part  s.      **,,$$W-- -s   .,.r   c           
      L   UR                  [        S5      n[        U5      nUR                  S:X  a  U R                  cF  [        U 5      " UU R
                  U R                  U R                  U R                  U R                  S9$ U R	                  UU R
                  U R                  U R                  U R                  U R                  S9$ U R                  U R                  UU R
                  U R                  R                  U R                  U R                  U R                  S9$ )zDispatches the response by the `Content-Type` header.

Returns a suitable reader instance.

:param dict headers: Response headers
rl   r  r  )r   r   r   r   )r   r   r   ro  r  r   r   r  r  r   part_reader_clsr   r  r   r   )r   r   rb  rc  s       rE   r   MultipartReader._get_part_reader  s    L"-!%(==K'((0DzMM$($9$9#'#7#7 $ 1 1'+'?'?  ,, $ 5 5#33 --#'#;#; -   ''.. $ 5 5 $ 5 5#'#;#; (  rD   c                 r    U R                   R                  S   n[        U5      S:  a  [        SU-  5      eU$ )Nr   F   z&boundary %r is too long (70 chars max))r  ra  rX   r   )r   r   s     rE   r  MultipartReader._get_boundary@  s8    >>,,Z8x=2EPQQrD   c                    #    U R                   (       a  U R                   R                  5       $ U R                  R                  5       I S h  vN $  N7frN   )r   r   r   r   r   s    rE   	_readlineMultipartReader._readlineG  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)NTrD   z#Could not find starting boundary %rr  )r  r   r   r   r   r   r  s     rE   r  *MultipartReader._read_until_first_boundaryL  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       rE   r  MultipartReader._read_boundaryZ  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                 Z  #    / n U R                   R                  U R                  S9I S h  vN nUR                  S5      nUR	                  U5        U(       d  O&[        U5      U R                  :  a  [        S5      eM{  [        U R                  S9nUR                  U5      u  pEU$  N|7f)N)max_line_lengthr   zToo many headers received)r  )
r   r   r  r   r   rX   r  r"   r!   parse_headers)r   linesr  parserr   raw_headerss         rE   r  MultipartReader._read_headersq  s     --00AUAU0VVELL)ELL5zD---$%@AA  d.B.BC%33E: Ws   *B+B)A=B+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)r  r   r   r   r   r   s    rE   r  (MultipartReader._maybe_release_last_part  sc     ??&??))++oo--///LL 7 78"DO	 '/s   A
BB	=B)r  r   r   r   r   r   r  r  r  r   r  r   r   r   )rJ   r   ))r?   r@   rA   rB   r   r   r  r  ro  r  r/   r  rl  rm  r   r   rx   r+   r   rp  r   r.   r   r   r   classmethodr  rO   r   r   r   r  r  r  rn  r  r  r  r  r  rC   r=   rD   rE   r4   r4     s     4 <@$01D8?$O  #{{".8'c"' '
 ' ' ' !O' 
'<  	 .0	1D	8 " 
"  !	 .0	1D	8!F!.	 .0	1.((( 
 .0	1(Ts . .
Y.#rD   r4   c                   f  ^  \ rS rSr% SrS\S'   SrS'S\S\S-  SS4U 4S	 jjjrS(S
 jr	S\
\   S-  S\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-  S\4S jjrS\S\4S jr  S)S\S\\\4   S-  S\4S jjr! S)S\"\#\\4      \\\4   -  S\\\4   S-  S\4S jjr$\S\S-  4S j5       r%S*S\S\S\4S  jjr&S*S\S\S\'4S! jjr( S+S"\)S#\SS4S$ jjr*S,S% jr+S&r,U =r-$ )-r5   i  zMultipart body writer.Nr   Tr   r   rJ   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_valuerz  r   _partsr   )r   r   r   rb  r|  s       rE   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 $ rN   r=   r   s    rE   	__enter__MultipartWriter.__enter__  r   rD   exc_typeexc_valexc_tbc                     g rN   r=   )r   r  r  r  s       rE   __exit__MultipartWriter.__exit__  s     	rD   c                 ,    [        U R                  5      $ rN   )iterr  r   s    rE   __iter__MultipartWriter.__iter__  s    DKK  rD   c                 ,    [        U R                  5      $ rN   )rX   r  r   s    rE   __len__MultipartWriter.__len__  s    4;;rD   c                     g)NTr=   r   s    rE   __bool__MultipartWriter.__bool__  s    rD   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   \"rW   )	r   rp   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr   replace)r   r   quoted_value_contents      rE   r  MultipartWriter._boundary_value  s    & 88D++U33<<((99T44e<<IJJ  %}}UG<3;;D&I)0099C??rD   c                 8    U R                   R                  S5      $ )Nr  )r   r   r   s    rE   r   MultipartWriter.boundary  s    ~~$$W--rD   r  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   r  r'   r   updateappend_payloadr)   r%   r  )r   r  r   payloads       rE   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   rl   )rG  rF  rE  rL  rE  )rl   r   rV  rW  rZ  rW  )r   r   r   r   r   keysr   rX   r  r{  r   r   rN  r   rx   r   )r   r  r   te_encodingr   r   s         rE   r  MultipartWriter.append_payload  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{;<rD   c                 L    Uc
  [        5       nU R                  [        XS95      $ )zHelper to append JSON part.r  )r   r  r$   )r   r  r   s      rE   append_jsonMultipartWriter.append_json  s&     ?!mG"";s#DEErD   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  )	r  r   r   r   rq  r   r   r  r(   )r   r  r   r   s       rE   append_formMultipartWriter.append_form  sr     #'23333?!mGc7##syy{#CD)""4W
 	
rD   c                 6   SnU R                    Hh  u  p#nUR                  nU(       d
  U(       d  Uc    gU[        S[        U R                  5      -   S-   U-   [        UR
                  5      -   S-   5      -  nMj     US[        U R                  5      -   S-   -  nU$ )zSize of the payload.r   NrU   r   )r  r   r   rX   r   _binary_headers)r   totalr   r   r	  	part_sizes         rE   r   MultipartWriter.size2  s     +/;;'DK		I;)*;Sdnn%&  d**+	,
  E ,7 	S((1,,rD   r   r~  c                 V   ^ ^^ SR                  UUU 4S jT R                   5       5      $ )zReturn string representation of the multipart data.

WARNING: This method may do blocking I/O if parts contain file payloads.
It should not be called in the event loop. Use as_bytes().decode() instead.
rl   c              3      >#    U  HH  u  pnS TR                   -   S-   UR                  R                  TT5      -   UR                  5       -   v   MJ     g7f)r  z
N)r   r  r   )r   r   _e_ter   r~  r   s       rE   r   )MultipartWriter.decode.<locals>.<genexpr>M  sa      
 "-# mm ""))(F;< kkm	
 "-s   AA)ry   r  r  s   ```rE   r   MultipartWriter.decodeG  s)     ww 
 "&
 
 	
rD   c                   #    / nU R                    H}  u  pEnUR                  SU R                  -   S-   5        UR                  UR                  5        UR	                  X5      I Sh  vN nUR                  U5        UR                  S5        M     UR                  SU R                  -   S-   5        SR                  U5      $  N\7f)zyReturn bytes representation of the multipart data.

This method is async-safe and calls as_bytes on underlying payloads.
r  r   N   --
rD   )r  r   r   r  r  ry   )r   r   r~  r   r   r  r  
part_bytess           rE   r  MultipartWriter.as_bytesV  s     
   "[[MDcLL/'9: LL--.  $}}X>>JLL$ LL! ) 	UT^^+i78xx ?s   A%C'C(ACr  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   Nr  )r  r   r   r   r  r   r  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r   r  r!  r   r   r	  ws          rE   r  MultipartWriter.writeq  sA     ,0;;'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c           	      b  #    U R                   (       a  gSU l         [        U R                  5       HI  u  nu  n  nUR                  (       a  M  UR                  (       a  M0   UR                  5       I Sh  vN   MK     g N	! [         a!  n[        R                  " SXSS9   SnAMv  SnAff = f7f)z
Close all part payloads that need explicit closing.

IMPORTANT: This method must not await anything that might not finish
immediately, as it may be called during cleanup/cancellation. Schedule
any long-running operations without awaiting them.
NTz%Failed to close multipart part %d: %s)exc_info)		_consumedr   r  	autocloseconsumedcloserp  r#   error)r   r  r   r   excs        rE   r.  MultipartWriter.close  s      >> "+4;;!7C$1>>>$---**,&& "8 '  #))?TX sH   AB/B/"B5A?6B:B/?B
B,B'!B/'B,,B/)r   r+  r   r  )r   N)rJ   r5   rN   r  )Tr   ).r?   r@   rA   rB   r   r  
_autocloserx   r   r  ro  BaseExceptionr   r  r   _Partr  r   r  rO   r  rp   compiler  r  propertyr  r   r
   r   r'   r   r  r  r   rr  r  r   r   rn  r  r   r  r.  rC   r  r  s   @rE   r5   r5     s>    LJ4 4t 4t 4 4$}%, % $	
 
!(5/ !   $  $AB!#,H!I@ @ @> .# . .4# 4S(9D(@ 4G 4$g $' $N =AFF!(c!2T!9F	F -1
eCHo&c)::
 c"T)
 
	
* cDj  (
s 
c 
 
s c QV 8 DHC*C<@C	C: rD   r5   c                   v    \ rS rSrS\SS4S jrS\SS4S jr SS\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  r  rJ   Nc                 :    Xl         S U l        S U l        S U l        g rN   )_writer	_encoding	_compress_encoding_buffer)r   r  s     rE   r   MultipartPayloadWriter.__init__  s    %)0426rD   r   c                 X    US:X  a  Xl         [        5       U l        g US:X  a  SU l         g g )Nr   rV  )r:  r   r<  )r   r   s     rE   r%  &MultipartPayloadWriter.enable_encoding  s.    x%N$-KD!++/DN ,rD   strategyc                 $    [        USUS9U l        g )NT)r   rI  r@  )r   r;  )r   r   r@  s      rE   r$  )MultipartPayloadWriter.enable_compression  s     ($(
rD   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)Nr   )r;  flushr  r:  r<  r9  r   	b64encoder  s     rE   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)Nr   r,   rV  )r;  compressr:  r<  r   divmodrX   r   rE  r9  r  r\  b2a_qp)r   r  bufdivmod	enc_chunkb64chunks          rE   r  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<  r9  )rG  Nr   )r?   r@   rA   rB   r   r   rx   r%  r   r$  r&  rn  r  rC   r=   rD   rE   r#  r#    sj    73 7 70 0 0 AE

36:
	
	R, ,4 ,rD   r#  )rj  )Xr   r\  r   r*  rp   rl  r  r~   collectionsr   collections.abcr   r   r   r   typesr   typingr	   r
   r   r   r   urllib.parser   r   r   	multidictr   r   abcr   compression_utilsr   r   hdrsr   r   r   r   r   helpersr   r   r   r   r    httpr!   http_exceptionsr"   logr#   r  r$   r%   r&   r'   r(   r)   r*   streamsr+   version_infor.   r2   rn  r   r3   __all__client_reqrepr:   RuntimeWarningr6   r7   rx   rr  r)  r8   r9   r   r/   	try_firstru  r4   r4  r5   r#  r=   rD   rE   <module>rd     s       	 
    F F  ; ; 6 6 3 % ?  L K  +     "w6!12Dw&5)%68KKLF
)6
* -	. 		 	j$$Jj$
3:tCH~%&j$\ ,6%CH%%(%4Z%P," ,"^f@ f@R nEOO4!&G !& 5!&Hg# g#T 	gsC Zg Zz7, 7,rD   