bgQlHddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZddlmZmZmZmZmZmZmZmZddlmZmZddlmZmZdd lmZdd l m!Z!dd l"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,dd l m-Z-m.Z.m/Z/dd lm0Z0ddl1m2Z2m3Z3dZ4erddl5m6Z6ee7efZ8n ejjZ8Gddej9Z:Gdde8e&Z;Gdde;Zde?dee7dee3d e7d!e2d"eZ0dRd?Z1dRd@Z2dAe3ddfdBZ4dRdCZ5dUdAe3ddfdEZ6defdFZ7dGede8fdHZ9dGed e8ddfdIZ:dGeddfdJZ;defdKZdefdMZ?dNe@de fdOZAxZBS)Vr&TNstatusreasonheadersr7r8r9returncFd|_d|_d|_d|_d|_t |_d|_d|_d|_ d|_ d|_ i|_ |t||_nt|_|||dS)NFr)_body _keep_alive_chunked _compression_compression_forcer_cookies_req_payload_writer _eof_sent_must_be_empty_body _body_length_stater_headers set_status)selfr7r8r9s r3__init__zStreamResponse.__init__Js +/ !;?$ +/ ?C37 &(  .9'.B.BDMM'MMDM '''''r2c|jduSN)rCrJs r3preparedzStreamResponse.preparedfs#4//r2Optional[asyncio.Task[None]]c,|jr |jjSdSrM)rBtaskrNs r3rRzStreamResponse.taskjs 9 9> !4r2c|jSrM)_statusrNs r3r7zStreamResponse.statusq |r2c|jSrM)r>rNs r3chunkedzStreamResponse.chunkedu }r2c|jSrM)r?rNs r3 compressionzStreamResponse.compressiony   r2c|jSrM)_reasonrNs r3r8zStreamResponse.reason}rUr2c|jr Jdt||_|- t|jj}n#t $rd}YnwxYw||_dS)NzGCannot change the response status code after the headers have been sent)rOintrTrphrase ValueErrorr])rJr7r8s r3rIzStreamResponse.set_statuss =  X   6{{ > #DL118     sA AAc|jSrMr=rNs r3 keep_alivezStreamResponse.keep_alives r2cd|_dS)NFrdrNs r3 force_closezStreamResponse.force_closes r2c|jSrM)rFrNs r3 body_lengthzStreamResponse.body_lengthr[r2c`tjdt|jsJ|jjS)Nzoutput_length is deprecated)warningswarnDeprecationWarningrC buffer_sizerNs r3 output_lengthzStreamResponse.output_lengths1 35GHHH#####//r2 chunk_sizecd|_tj|jvrt d|t jdtdSdS)z,Enables automatic chunked transfer encoding.Tz>You can't enable chunked encoding when a content length is setNzChunk size is deprecated #1615)r>rCONTENT_LENGTHrH RuntimeErrorrkrlrm)rJrps r3enable_chunked_encodingz&StreamResponse.enable_chunked_encodingsX  $- / /S   ! M:rsrrHrrrrrJrs r3rzStreamResponse.content_lengthsp  JJE} "U25UDM$- . . . M  d14 8 8 8 8 8r2c*tjSrM)r content_typers r3rzStreamResponse.content_typesww##r2cd|jt||_|dSrM)rr _content_type_generate_content_type_headerrs r3rzStreamResponse.content_type"s1  ZZ **,,,,,r2c*tjSrM)rcharsetrs r3rzStreamResponse.charset(swwr2c|j}|dkrtd|jJ||jddn)t ||jd<|dS)Napplication/octet-streamzYSetting charset for application/octet-stream doesn't make sense, setup content_type firstr)rrs _content_dictrrlowerr)rJrctypes r3rzStreamResponse.charset-s! . . .? !--- =   " "9d 3 3 3 3,/JJ,<,<,>,>D y ) **,,,,,r2cdt|jtjS)zuThe value of Last-Modified HTTP header, or None. This header is represented as a `datetime` object. )rrHrr LAST_MODIFIEDrNs r3 last_modifiedzStreamResponse.last_modified<s% t}001CDDEEEr2c*|'|jtjddSt |t t frMtjdtj tj ||jtj<dSt |tj r;tjd| |jtj<dSt |tr||jtj<dSdS)Nz%a, %d %b %Y %H:%M:%S GMT)rHrrrryr`floattimestrftimegmtimemathceildatetime utctimetuplerrs r3rzStreamResponse.last_modifiedDs = M  d0$ 7 7 7 7 7 U| , , 604 +T[59I9I-J-J11DM$, - - -x0 1 1 604 +U-?-?-A-A11DM$, - - -s # # 605DM$, - - - 6 6r2c0|jtj}|sdS|tkrt tSt j|}|sdS|dd\}}t t||S)N)rr)is_weakr) rHrrETAGrrr fullmatchgrouprx)rJ quoted_valuematchrrs r3etagzStreamResponse.etagUs}((33  (4 X % %h''' '(66 4Q**MM    r2c|'|jtjddSt |t r |t ks%t |tr+|jt krt |jtj<dSt |t r)t|d|d|jtj<dSt |trat |jt rGt|j|j r d|jdn d|jd}||jtj<dStdt|d)N"zW/"zUnsupported etag type: z . etag must be str, ETag or None) rHrrrryrrrrrrrbrw)rJr hdr_values r3rzStreamResponse.etagesV = M  di . . . . .$$ ():): ud # #*;(- x(?(?'/DM$) $ $ $ s # #   & & &'35|||DM$) $ $ $ t $ $ EK)E)E   , , ,05 U,ek,,,,CUu{CUCUCUI'0DM$) $ $ $2$u++222 r2 CONTENT_TYPEc|jJ|jJdd|jD}|r|jdz|z}n|j}||j|<dS)Nz; c3*K|]\}}|d|VdS)=Nr1).0kvs r3 z?StreamResponse._generate_content_type_header..s0MM$!Qa::!::MMMMMMr2)rrjoinitemsrH)rJrparamsrs r3rz,StreamResponse._generate_content_type_headerzs!---!---MM$2D2J2J2L2LMMMMM  '&-6EE&E&+ l###r2codingcK|tjkrh|jJ|j|jt j<|j|j|jt j ddSdSrM) r%r-rCrrHrCONTENT_ENCODINGrzpopallrr)rJrs r3_do_start_compressionz$StreamResponse._do_start_compressionsx ]+ + +'33339 4   +' '#5gndk#R#R [[)))))))))r2cK||_|jx}|_|d{V||d{V|d{V|SrM)rBrC_prepare_headers _prepare_hook_write_headers)rJrwriters r3rzStreamResponse._starts (/(??%##%%%%%%%%%##D)))))))))!!######### r2cRK|j}|J|j}|J|j}||j}||_|j}|j}|jD]@}|ddd}| tj |A|j r| |d{V|jrx|tkr't!d|j|js#|d|tj<tj|vr |tj=nY|jrR|j|_|j?|tkr+|js#|d|tj<n |jsd}|jrQtj|vr't3|j|jr |tj=tj|vr |tj=n |tjd|tjt?|tj tBtj"|vr<|r|tFkrd|tj"<dSdS|tkrd |tj"<dSdSdS) Nr_)headerrz@Using chunked encoding is forbidden for HTTP/{0.major}.{0.minor}rWFrz keep-aliveclose)$rBrCr=rerrHrAvaluesoutputaddr SET_COOKIEr?rr>r!rsformatrEenable_chunkingTRANSFER_ENCODINGrr _length_checkrlengthrrr7 setdefaultrDATErSERVERr CONNECTIONr )rJrrrerr9cookiers r3rzStreamResponse._prepare_headerss)"""%!!!%   +J%/-m**,, 0 0FMMM,,QRR0E KK / / / /   3))'22 2 2 2 2 2 2 2 = '-''"3396'/3J3J+ <&&(((2;./"g--D/0   ' /FM}$m++3D..000:C 671'!&J  # N"g--2N 33-D/0%00D23   t02L M M M49&;&=&=>>>4;888 ?' ) ) 7m++/;GDO,,,,+m++/6GDO,,, * ) ,+r2cK|j}|J|j}|J|j}d|d|d|j|j}|||jd{VdS)NzHTTP/{}.{} {} {}rr)rBrCrrrTr] write_headersrH)rJrrr status_lines r3rzStreamResponse._write_headerss)"""%!!!/(// AJ DL$,  ""; >>>>>>>>>>>r2datacKt|tttfsJdt |z|jrt d|jt d|j|d{VdS)N#data argument must be byte-ish (%r)z%Cannot call write() after write_eof()z$Cannot call write() before prepare()) rybytes bytearray memoryviewrwrDrsrCwriterJrs r3rzStreamResponse.writes 5)Z0   > > 04:: = > >  > HFGG G   'EFF F"((...........r2cK|jr Jd|j Jdtjdtd|jd{VdS)NzEOF has already been sentResponse has not been startedz2drain method is deprecated, use await resp.write()r) stacklevel)rDrCrkrlrmdrainrNs r3rzStreamResponse.drains>>>#>>>!#//1P/// @     "((***********r2r2cBKt|tttfsJdt |z|jrdS|j Jd|j|d{Vd|_d|_|jj |_ d|_dS)NrrT) ryrrrrwrDrC write_eofrB output_sizerFrs r3rzStreamResponse.write_eofs 5)Z0   > > 04:: = > >  >  F#//1P///",,T222222222  0<#r2c|jrd}n/|jr&|jJ|jjd|jjd}nd}d|jjd|jd|dS)Neof z not prepared<>)rDrOrBrrrr.r8)rJinfos r3__repr__zStreamResponse.__repr__sy > "DD ] "9(((i&:::::DD!DB4>*BBT[BB4BBBBr2keyc|j|SrMrGrJrs r3 __getitem__zStreamResponse.__getitem__)s{3r2c||j|<dSrMr )rJrrs r3 __setitem__zStreamResponse.__setitem__,s  Cr2c|j|=dSrMr r s r3 __delitem__zStreamResponse.__delitem__/s K   r2c*t|jSrM)lenrGrNs r3__len__zStreamResponse.__len__2s4;r2c*t|jSrM)iterrGrNs r3__iter__zStreamResponse.__iter__5sDK   r2c:tt|SrM)hashidrNs r3__hash__zStreamResponse.__hash__8sBtHH~~r2otherc ||uSrMr1)rJrs r3__eq__zStreamResponse.__eq__;s u}r2)r:rPrM)r:N)r:r{)rr)r:Nr2)Cr.r/r0rr`r rr$rKpropertyrxrOrRr7rWrZr8rIrergrirortr r%rzr9rr~rrrsetterrrrrrrrrrrrrrrrrrrrrrrrrr rrrr rrobjectr __classcell__rs@r3r&r&FsTM  $*. (((( ( ,' (  ((((80$000X0X XX!T!!!X!X !%     HTN   X !!!!!S!!!X!0s000X0 P P(3- P4 P P P P=A((eD-$789( (((($XX"& $-1!%#'!%"&1%1%1%1%1% # 1%  1%%S/*1%1%1%4.1%#1%3-1% 1%1%1%1%h59c    $,SM @C     $& &&&&&X& 9HSM 9d 9 9 9 9$c$$$$$X$-#-$---- #X ^ -Xc] -t - - -^ -Fx(9:FFFXF6eC0A3$FGH6 6666   htn    X   [(5s#34[*$(#4 , ,  ,  , , , ,<-2MPW2W T./{{7++ L00+w/B$'0C +*$ w(>> 6BL!23 v|LLL  DIIDI15#5 +r2c|jSrM)r<rNs r3r%z Response.bodys zr2c|d|_d|_nt|ttfr||_d|_n t j|x|_}n2#t j$r tdt|zwxYwd|_|j }tj |vr|j|tj <|jr(|jD]\}}||vr|||<d|_dS)NFzUnsupported body type %rT)r< _body_payloadryrrrPAYLOAD_REGISTRYr LookupErrorrbrwrHrrrr9rr/)rJr%r9rrs r3r%z Response.bodys$ <*.DJ',D   ui0 1 1 -DJ!&D   J$+$<$@$@$F$FF TT& J J J !;d4jj!HIII J"&D mG //-1->)*| -$(L$6$6$8$8--LS%'))', $s &A%%/BcV|jdS|j|jpdS)Nr,)r<decoderrNs r3r&z Response.texts, : 4z  !8999r2c|/t|tsJdt|z|jdkrd|_|jd|_||j|_d|_d|_dS)Nr*rr+r,F) ryrrwrrr.r<r5r/)rJr&s r3r&z Response.texts|z #  || +d4jj 8|    : : : ,D  < "DL[[.. " $r2c|jrdStj|jvrt jS|jt|jS|jrdS|j t|j SdS)Nr) r>rrrrHrrr/rr5r<rs r3rzResponse.content_lengthst = 4  $- / /77) )  ,t,-- -   4 Z #tz?? "1r2rc td)Nz#Content length is set automatically)rsrs r3rzResponse.content_lengths@AAAr2r2rcpK|jrdS|j|j}n|j}|r Jd||jJ|jJ||jr(t d{VdS|jrXtt|}|j |jd{Vt d{VdSt tt|d{VdSt d{VdS)Nzdata arg is not supported, got ) rDr/r<rBrCrErrr5r r"rr)rJrr%rrs r3rzResponse.write_eofs >  F  (48JDD(DCCC4CCCCxy$$$#///  ' ;gg'')))))))))))# ;w--#gmD$8999999999gg'')))))))))))gg''UD(9(9:::::::::::''##%% % % % % % % % % %r2rr)cKt|j|jr&tj|jvr|jtj=n|jstj|jvr|jrCtt|j j }|!t||jtj<nv|j rt|j nd}|dks2|jdkrH|jtjkr!t||jtj<t!|d{VS)N0i0)rrr7rrrrHr>r5r r"r<sizerrupper METH_HEADrr)rJrr@body_lenrs r3rzResponse._starts ' D D G"dm33M$"56 G4#6dm#K#K! GGTZ005#9+?+?+A+AT^+S+S9rrr%r-rrrr0r1r<rrkrlcompressflushr/rHrrrr)rJr compressorrs r3rzResponse._do_start_compressionsv   ? ?66v>>>>>>>> > ]+ + +(V\**$($<,J :)))'/C OOk4Q4Q XDJXXX!))$*55555555 8H8H8J8JJ  !(44439r_s ''''''%%%%%%                    ('''''''%%%%%%------                        @?????????//////// J/((((((sCx(II.IDIvvvvvY vvvrXQXQXQXQXQ~XQXQXQx  &**  3- 5/    SM l # r2