wce~ddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z m Z mZmZmZmZmZmZmZmZmZmZmZmZddlmZmZmZddlmZm Z m!Z!ddl"m#Z#m$Z$dd l%m&Z&m'Z'm(Z(m)Z)m*Z*dd l+m,Z,m-Z-m.Z.m/Z/dd l0m1Z1dd l2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9dd l:m;Z;dZZ>Gdde?Z@Gdde?ZAdeeBdeeeBeeBeBfffdZC d'deeBeBfdeBdeeBfdZDGddZEGddZFe9eFe5jGdd e6ZHGd!d"ZIee6eBeBfZJGd#d$e6ZKGd%d&ZLy)(N)deque) TracebackType) TYPE_CHECKINGAny AsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast) parse_qslunquote urlencode) CIMultiDictCIMultiDictProxy MultiMapping)ZLibCompressorZLibDecompressor)CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODING CONTENT_TYPE)CHARTOKENparse_mimetypereify) HeadersParser) JsonPayload LookupErrorOrderPayload StringPayload get_payload payload_type) StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec eZdZy)r1N__name__ __module__ __qualname__3/usr/lib/python3/dist-packages/aiohttp/multipart.pyr1r1Br<r1c eZdZy)r2Nr7r;r<r=r2r2Fr>r<r2headerreturncRdtdtfddtdtfd}dtdtffd }dtdtfd}dtdtfd}djttj t d d td tdtfd }|sdifS|jd ^}}|s"tjt|difSi}|r |jd} d| vr"tjt|difS| jdd\} } | jj} | j} | |vr"tjt|difS| stjt| || r>|| r || dd} n| stjt| || rT|| r| jdd\} } } | xsd} n tjt| ] t!| | d} nd}|| rd}|| ddjd} nL| rd}nA|r?| d |d}||r-|jd||ddjd} d}|r"tjt|difS| || <|r |j|fS#t"$r"tjt| YHwxYw)NstringrAc@t|xrtt|k\SN)boolr"setrCs r=is_tokenz+parse_content_disposition..is_tokenMsF|4V 44r<c.|d|dcxk(xrdk(ScS)Nr"r;rHs r= is_quotedz,parse_content_disposition..is_quotedPs ayF2J-#----r<c@|xr|jddk(S)N')count)rCrIs r= is_rfc5987z-parse_content_disposition..is_rfc5987Ss!:FLL$5$::r<c$|jdS)N*)endswithrHs r=is_extended_paramz4parse_content_disposition..is_extended_paramVss##r<c|jddz}|sy|jdr||dn||d}|jS)NrTrFrK)findrUisdigit)rCpos substrings r=is_continuous_paramz6parse_content_disposition..is_continuous_paramYsHkk#"&,ooc&:F3rNst   ""r<)charstextr^c8tjd|dd|S)Nz\\([z])z\1)resub)r_r^s r=unescapez+parse_content_disposition..unescape`svvugR(%66r<;r=rrKrOrPutf-8strictTFz\/)strrFjoinmapraescaper!splitwarningswarnr1poplowerstriplstripr2rUnicodeDecodeError)r@rMrRrVr\rcdisptypepartsparamsitemkeyvalueencoding_failed_valuerIs @r=r3r3Js555.#.$.;3;4;$#$$$#C#D#-/GGC 44H,I7s7c7c7 Rx||C(Hu H  1&9:RxF yy| d? MM5f= >8OZZQ' Uiik!  &= MM5f= >8O} MM4T: ;   % q-e_ 8>? s #% %*[[a%8"!U#.w 8>? x: F q!3!3E!:;%"7!E!H:.V$IIaL$VAb\%8%8%?@E"F 9&ABRxs y | >> V ##5&  8>? s; K;;'L&%L&rvnamec d|z |sy |vr| S||vr||Sg}t fd|jD}t|D]T\}\}}|jdd\}}|j dr|dd}|t |k(r|j |Tn|sydj|}d|vr)|jdd\} }}| xsd } t|| d S|S) Nz%s*c3PK|]\}}|js||fywrE) startswith).0rxryname_sufs r= z/content_disposition_filename..s) 'S%S^^H=US%L s& &rTrrKr]rOrPrfrg) sorteditems enumeraterlrUrhappendrir) rvr~rufnparamsnumrxryr{tailrzrs @r=r4r4st|H  V h d| +1<<>  "+8!4  C#uiiQ'GAt}}S!CRys3x U#  %> ?,, ;;t$ $ ?sA A<A:A<%A<sizecK|jry|jr|j|d{}n|j|d{}|xjt |z c_|j|jk(rd|_|jr.|j jd{}d|k(sJd|S777w)zWReads body part content chunk of the specified size. size: chunk size r<NT z3reader did not read all the data or it is malformed)rr_read_chunk_from_length_read_chunk_from_streamrlenrreadline)rrchunkclrfs r=rzBodyPartReader.read_chunk0s << <<66t<.>>? mm((44 5sAA AA c K|t|jdzk\sJd|jdu}|r(|jj |d{|_|jj |d{}|xj t |jjz c_|j dksJd|jJ|j|z}d|jz}|r|j|}n;|j|tdt|jt|z }|dk\rtj5tjdt|jj||dddd||kDr|jd||_|t|j|}|sd |_|j}||_|S77y#1swY^xYww) NrPz.>*?#c(*J#KLC !8((* 8'';MN ))&,7 8cz#'#3#3DS#9 3t//037E# !!  1 >. 8 8s>AHG1'H;G4> *KK(E~~H NNU2M E]$:#  ##D) #mm4466I##DNN3CRy LL   * '27s&AD2D.BD2,D0-AD20D2cK|jry|js1|j|jd{|js0yy7w)z0Like read(), but reads all the data to the void.N)rrrrs r=rzBodyPartReader.releases9 << ,,//$//2 2 2,, 2s8AAA A)rzrzcK|jdd{}|xs|jd}|j|S7+w)z;Like read(), but assumes that body part contains text data.TrNrfdefault)r get_charsetrrrzrs r=r_zBodyPartReader.textsGYYdY++@t///@{{8$$ ,sAA,AcK|jdd{}|sy|xs|jd}tttt ft j|j|S7\w)zL ""  ," XFVW W Xs&BA&BA(B(BBc|jS)zgzipdeflateT)rzsuppress_deflate_headerunknown content encoding: )rrrrprdecompress_sync RuntimeErrorrrrzs r=rzBodyPartReader._decode_contentsl<<##$4b9??A z !K * *#!(,od# $ 7zBCCr<c|jjtdj}|dk(rt j |S|dk(rt j|S|dvr|Stdj|)Nr]base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {}) rrrrpr b64decodebinasciia2b_qprformatrs r=rz'BodyPartReader._decode_content_transfers|<<##$=rBHHJ x ##D) ) + +??4( ( 3 3K:AA(K r<rc|jjtd}t|}|jjd|S)z>Returns charset parameter from Content-Type header or default.r]charset)rrr r# parameters)rrctypemimetypes r=rzBodyPartReader.get_charsets;   r2!%(""&&y'::r<cpt|jjt\}}t |dS)z|Returns name specified in Content-Disposition header. If the header is missing or malformed, returns None. r~r3rrrr4rr{rvs r=r~zBodyPartReader.names/ .dll.>.>?R.ST 6+FF;;r<cpt|jjt\}}t |dS)zReturns filename specified in Content-Disposition header. Returns None if the header is missing or malformed. filenamerrs r=rzBodyPartReader.filenames/ .dll.>.>?R.ST 6+FJ??r<r)%r8r9r:rrbytesr-rrrrr rrFrrrrrrrrhr_r rrr rrrrrrrr$r~rr;r<r=r0r0s0J ) )(? )JV )  )=)9: HUO ,1DU ,6S%,#% # % D:37;%hsm%s%7;GhsmGxSRUX?WG7; hsm tE#s(O?T ( 5 U  DE De D U u ;3;3;  > %!&F:   (D ( ( Fv F r<writercK|j}|jdd{}|rF|j|j|d{|jdd{}|rEyy7M7%7 w)Ni)r)r}rwriter)rr%fieldrs r=r'zBodyPartReaderPayload.write sk &&E&22,,u||E23 3 3***66E3 36s9"A8A2)A8A4A8(A6)A80A84A86A8)r8r9r:r0rrr' __classcell__r$s@r=rrs< Gn GS GC GD G7#7$7r<rceZdZdZeZdZeZde e e fde ddfdZ de dfdZdeedeffd Zed d defd Zdefd ZdeedeffdZddZdedeffdZdddedeffdZde fdZdefdZddZddZddZddZ y)r.zMultipart body reader.NrrrAc||_d|jzj|_||_d|_d|_d|_g|_y)Nz--FT) r _get_boundaryencoderr _last_partr_at_bofr)rrrs r=rzMultipartReader.__init__sJ !3!3!55==? NR  $& r<r0c|SrEr;rs r=rzMultipartReader.__aiter__%s  r<cRK|jd{}|t|S7wrErrs r=rzMultipartReader.__anext__*rrresponser5c`|j|||j|j}|S)zConstructs reader instance from HTTP response. :param response: :class:`~aiohttp.client.ClientResponse` instance )response_wrapper_clsrr)clsr3objs r= from_responsezMultipartReader.from_response2s3&& c(**H,<,<=  r<c|jS)z@Returns True if the final boundary was reached, false otherwise.rrs r=rzMultipartReader.at_eof@rr<cXK|jry|jd{|jr |jd{d|_n|j d{|jry|j d{|_|j S7~7\7>7w)z#Emits the next multipart body part.NF)r_maybe_release_last_partr0_read_until_first_boundary_read_boundaryfetch_next_partr/rs r=rzMultipartReader.nextDs <<++--- <<113 3 3 DL%%' ' ' << $ 4 4 66 . 3 (7sE!B*B"#B*B$B*'B&($B* B( B*$B*&B*(B*cK|jsA|jd{}|y|jd{|js@yy7.7w)z=Reads all the body parts to the void till the final boundary.N)rrrrs r=rzMultipartReader.releaseVsD,,$D|,,. ,,$ !s% AAAAAAAc`K|jd{}|j|S7w)z"Returns the next body part reader.N) _read_headers_get_part_reader)rrs r=r>zMultipartReader.fetch_next_part^s/**,,$$W---s .,.rc8|jtd}t|}|jdk(rD|jt|||j S|j ||j S|j |j||j S)zDispatches the response by the `Content-Type` header. Returns a suitable reader instance. :param dict headers: Response headers r] multipart)rr r#typemultipart_reader_clsrpart_reader_clsr)rrrrs r=rBz MultipartReader._get_part_readeres L"-!%( ==K '((0!tDz'4==99,,WdmmD D''O Or<ct|jt}|jdk(sJdd|jvrt d|jtz|jd}t |dkDrt d|z|S)NrDz!multipart/* content type expectedrz$boundary missed for Content-Type: %sFz&boundary %r is too long (70 chars max))r#rr rErrr)rrrs r=r-zMultipartReader._get_boundaryys!$,,|"<=}} +P-PP+ X00 06l9SS &&z2 x=2 EPQ Qr<cK|jr|jjS|jjd{S7wrE)rrorrrs r= _readlinezMultipartReader._readlines9 <<<<##% %]]++----sAA A A cK |jd{}|dk(rtd|jz|j}||jk(ry||jdzk(rd|_yp7\w)NTr<z#Could not find starting boundary %rr)rKrrrrrrs r=r<z*MultipartReader._read_until_first_boundarysw..**E| 9T^^LLLNE&$..500# *sA6A4AA6cK|jd{j}||jk(ry||jdzk(ryd|_|jd{}|jd{}|dddk(r|jj |y|jj ||gytd|d|j77{7ew)NrTrPzInvalid boundary z , expected )rKrrrrrrr)rrepiloguers r=r=zMultipartReader._read_boundarys~~''//1 DNN "  dnnu, ,DL!^^--H"nn..I !}% ##I.  ##Y$9:0 T^^DVWX X)( ..s5C%CAC%%C!&C%=C#>A"C%!C%#C%cKdg} |jjd{}|j}|j||snGt }|j |\}}|S7Iw)Nr<)rrrqrr% parse_headers)rlinesrparserr raw_headerss r=rAzMultipartReader._read_headersso--0022EKKME LL   %33E:3s"A0A.A A0cK|js|jjs"|jjd{|jj |jjd|_yy7<w)z8Ensures that the last read body part is read completely.N)r/rrrrrs r=r;z(MultipartReader._maybe_release_last_partsa ?? &??))+oo--/// LL   7 7 8"DO '/sABB=Br)rAr)!r8r9r:rrr5rFr0rGr rhr-rrrr rr classmethodr8rFrrrr>rBr-rrKr<r=rAr;r;r<r=r.r.s+ 4 $O'S 1'L'T' ' (  %)>9: ; "  "   %)>9: ;$!.  .0 1.P(P  .0 1P(s .. Y. #r<r.ceZdZdZddedeeddffd ZddZdeee d ee d ee ddfd Z de e fd Zdefd ZdefdZej(dZej(dZedefdZedefdZd dedeeedefdZdedefdZ d dedeeedefdZ d de e!e"eefe#eeffdeeedefdZ$edeefdZ%d!dededdfdZ&xZ'S)"r/zMultipart body writer.NsubtyperrAc||ntjj} |jd|_d|d|j}t|%d|g|_ y#t $r t ddwxYw)Nasciiz(boundary should contain ASCII only charsz multipart/z ; boundary=) content_type) uuiduuid4hexr.rUnicodeEncodeErrorr_boundary_valuer"r_parts)rrXrrr$s r=rzMultipartWriter.__init__s'389I9I  S%__W5DNWI[1E1E0FG E2#% " SGHd R Ss A&&A<c|SrEr;rs r= __enter__zMultipartWriter.__enter__rr<exc_typeexc_valexc_tbcyrEr;)rrdrerfs r=__exit__zMultipartWriter.__exit__s r<c,t|jSrE)iterrars r=__iter__zMultipartWriter.__iter__sDKK  r<c,t|jSrE)rrars r=__len__zMultipartWriter.__len__s4;;r<cy)NTr;rs r=__bool__zMultipartWriter.__bool__sr<s\A[!#$%&'*+\-.^_`|~\w]+\Zs[\x00-\x08\x0A-\x1F\x7F]cH|j}tj|j|r|j dStj |j |r td|jdd}|jdd}d|j dzdzS)zzWrap boundary parameter value in quotes, if necessary. Reads self.boundary and returns a unicode string. rZz*boundary value contains invalid characters\s\\"s\"rL) rramatch_valid_tchar_regexrsearch_invalid_qdtext_char_regexrreplace)rryquoted_value_contents r=r`zMultipartWriter._boundary_values& 88D++U 3<<( ( 99T44e <IJ J %}}UG<3;;D&I)0099C??r<c8|jjdS)NrZ)rrrs r=rzMultipartWriter.boundarys~~$$W--r<r7rc| t}t|tr,|jj ||j |S t ||}|j |S#t$rtd|zwxYw)NrzCannot create payload from %r) r isinstancer)rupdateappend_payloadr+r' TypeError)rr7rpayloads r=rzMultipartWriter.appends ?!mG c7 # KK  w '&&s+ + 4%c7;**733 G ?# EFF Gs A((Brc|jjtdj}|r|dvrt d||dk(rd}|jjt dj}|dvrt dj ||dk(rd}|j}| |s|st||jt<|jj|||f|S) z)Adds a new body part to multipart writer.r])rrrrrN)r]rrrr r) rrrrprrrrrhrrar)rrrz te_encodingrs r=r~zMultipartWriter.append_payload)s#*//"5"5  #  %'  (GG!;H:FG G z !H&-__%8%8 % &  %'  J J:AA+N  ( "K||  X.1$iGOON + GX{;<r<cR| t}|jt||S)zHelper to append JSON part.r{)rr~r&)rr7rs r= append_jsonzMultipartWriter.append_jsonIs( ?!mG"";sG#DEEr<ct|ttfsJ| t}t|trt |j }t |d}|jt||dS)z&Helper to append form urlencoded part.T)doseqz!application/x-www-form-urlencoded)rr[) r|rr rlistrrr~r*)rr7rrs r= append_formzMultipartWriter.append_formRsn #'2333 ?!mG c7 #syy{#CD)"" g4W   r<c.d}|jD]e\}}}|s|s |jy|tdt|jzdz|jzt|j zdzz }g|dt|jzdzz }|S)zSize of the payload.rNrP)rarrrr_binary_headers)rtotalrrzrs r=rzMultipartWriter.sizegs+/;;  'D(K;$))*; Sdnn%&))d**+ ,   E  S((1,, r<r%close_boundaryctK|jD]\}}}|jd|jzdzd{|j|jd{|s|rct |}|r|j ||r|j ||j|d{|jd{n|j|d{|jdd{|r*|jd|jzdzd{yy7777l7T7=7w)z Write body.rrNs-- )rar'rrMultipartPayloadWriterenable_compressionenable_encoding write_eof)rr%rrrzrws r=r'zMultipartWriter.write{s+/;; ( 'D(K,,ut~~5?@ @ @,,t334 4 4;*62((2%%k2jjm##kkm##jj(((,,w' ' ' (" ,,ut~~5 AB B B ! A 4$#( ' Cs|8D8D*"D8D,A D8+D.,D8D0D8D2D86D47,D8#D6$D8,D8.D80D82D84D86D8)mixedN)rAr/rE)T)(r8r9r:rrhr rrcr BaseExceptionrrhr _PartrkrrmrFroracompilertrvpropertyr`rrrr)rr~rrrrr rrr'r)r*s@r=r/r/s &&#&RV&" 4 ./ -( '    !(5/!  $$$AB!+,H!I @@@>.#.. 4# 4c1B(C 4w 4g'B@DFF!),s*;!<F F04 8E#s(O,gc3h.?? @ ,s+,    *hsm&C#CtCtCr<r/creZdZdeddfdZdeddfdZdejfdede ddfd Z d d Z d e ddfd Z y)rr%rANc<||_d|_d|_d|_yrE)_writer _encoding _compress_encoding_buffer)rr%s r=rzMultipartPayloadWriter.__init__s (,3759r<rzcV|dk(r||_t|_y|dk(rd|_yy)Nrr)rrr)rrzs r=rz&MultipartPayloadWriter.enable_encodings0 x %DN$-KD ! + +/DN,r<rstrategyc*t|d||_y)NT)rzrr)rr)rrzrs r=rz)MultipartPayloadWriter.enable_compressions($( r<c^K|j<|jj}|r d|_|j|d{|jdk(rN|jrA|j jt j|jd{yyy7b7 w)Nr)rflushr'rrrr b64encoderMs r=rz MultipartPayloadWriter.write_eofs >> %NN((*E!%jj''' >>X %$$ll(()9)9$:O:O)PQQQ% &(Rs%AB-B)AB-!B+"B-+B-rcK|j(|r&|jj|d{}|sy|jdk(r|j}|J|j ||rjt t |d\}}|d|dz||dzdc}|_|r9tj|}|jj|d{yyy|jdk(r7|jjtj|d{y|jj|d{y77t7.7 w)Nrrr) rcompressrrrdivmodrrrrr'r b2a_qp)rrbufdivmod enc_chunkb64chunks r=r'zMultipartPayloadWriter.writes' >> %"nn55e<< >>X %''C? "? JJu !#c(A.S47 #'NCa N0 40%// :H,,,,X666 ^^1 1,,$$X__U%;< < <,,$$U+ + +%=7 < +sG-ED>BE E AEE#E8E9EEEEr)r8r9r:rrrhrzlibZ_DEFAULT_STRATEGYrrrrr'r;r<r=rrsk:s:t: 000(9P9P  36   R,,4,r<r)r)Mrr rrar\rmr collectionsrtypesrtypingrrrrr r r r r rrrrr urllib.parserrr multidictrrrcompression_utilsrrhdrsrrrrr helpersr!r"r#r$httpr%rr&r'r(r)r*r+r,streamsr-__all__ client_reqrepr5RuntimeWarningr1r2rhr3r4rr0 try_firstrr.rr/rr;r<r=rss    76AA?87" - .   `$ SM`$ 8C=$sCx. ()`$H,6 CH %( c]B,","^{@{@|nEOO47G757*t#t#n gsC DCgDCN7,7,r<