B `Zf @sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZmZddlmZmZmZmZmZmZmZmZmZmZddlmZmZddlm Z m!Z!dd l"m#Z#dd l$m%Z%m&Z&m'Z'm(Z(dd l)m*Z*m+Z+m,Z,m-Z-dd l!m.Z.dd l/m0Z0m1Z1dZ2eree5ee1e5e0e;d ddZ?dS)N)Executor) parsedate)Morsel SimpleCookie) TYPE_CHECKINGAnyDictIteratorMappingMutableMappingOptionalTupleUnioncast) CIMultiDictistr)hdrspayload)AbstractStreamWriter)PY_38 HeadersMixinrfc822_formatted_timesentinel) RESPONSESSERVER_SOFTWARE HttpVersion10 HttpVersion11)Payload) JSONEncoder LooseHeaders) ContentCodingStreamResponseResponse json_response) BaseRequestZSameSitesamesitec@seZdZdZdZdZdS)r!deflategzipidentityN)__name__ __module__ __qualname__r'r(r)r-r-o/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/aiohttp/web_response.pyr!4sr!c seZdZdZddddeeeeeddddZe e dd d Z e d dd d Z e edddZ e e dddZe e dddZe edddZdefeeeeeeeeffddddZe ee dddZddddZe edddZe eddd Zdpeedd!d"d#Zdqeee efdd$d%d&Ze d'dd(d)Ze d*dd+d,Zdddd-ddddd.eeeeeeeeeefeee ee eeeedd/ d0d1Zdd-d2eeeedd3d4d5Z e eedfd6d7 Z!e!j"eedd8d9d7Z!e edfd:d; Z#e#j"edd8d Z$e$j"eedd8d?d>Z$e ee%j%dd@dAZ&e&j"eeee'e%j%efdd8dBdAZ&e(j)fe*ddCdDdEZ+eddFdGdHZ,dIddJdKdLZ-dIee.dJdMdNZ/dIe.dJdOdPZ0dddQdRZ1dddSdTZ2e3ddUdVdWZ4dddXdYZ5dre3ddUd[d\Z6edd]d^Z7ee8d_d`daZ9ee8ddbdcddZ:edd_dedfZ;eddgdhZeddkdlZ?e@e dmdndoZAZBS)sr"TN)statusreasonheaders)r0r1r2returncCspd|_d|_d|_d|_d|_t|_d|_d|_d|_ d|_ i|_ |dk rXt ||_ nt |_ |||dS)NFr)_body _keep_alive_chunked _compression_compression_forcer_cookies_req_payload_writer _eof_sent _body_length_stater_headers set_status)selfr0r1r2r-r-r.__init__Gs zStreamResponse.__init__)r3cCs |jdk S)N)r;)rAr-r-r.preparedbszStreamResponse.preparedzasyncio.Task[None]cCst|jddS)Ntask)getattrr:)rAr-r-r.rDfszStreamResponse.taskcCs|jS)N)_status)rAr-r-r.r0jszStreamResponse.statuscCs|jS)N)r6)rAr-r-r.chunkednszStreamResponse.chunkedcCs|jS)N)r7)rAr-r-r. compressionrszStreamResponse.compressioncCs|jS)N)_reason)rAr-r-r.r1vszStreamResponse.reason)r0r1 _RESPONSESr3cCsV|jrtdt||_|dkrLy||jd}Wntk rJd}YnX||_dS)NzGCannot change the response status code after the headers have been sentr)rCAssertionErrorintrF ExceptionrI)rAr0r1rJr-r-r.r@zs  zStreamResponse.set_statuscCs|jS)N)r5)rAr-r-r. keep_aliveszStreamResponse.keep_alivecCs d|_dS)NF)r5)rAr-r-r. force_closeszStreamResponse.force_closecCs|jS)N)r=)rAr-r-r. body_lengthszStreamResponse.body_lengthcCstdt|jst|jjS)Nzoutput_length is deprecated)warningswarnDeprecationWarningr;rL buffer_size)rAr-r-r. output_lengths  zStreamResponse.output_length) chunk_sizer3cCs2d|_tj|jkrtd|dk r.tdtdS)z,Enables automatic chunked transfer encoding.Tz>You can't enable chunked encoding when a content length is setNzChunk size is deprecated #1615)r6rCONTENT_LENGTHr? RuntimeErrorrRrSrT)rArWr-r-r.enable_chunked_encodings  z&StreamResponse.enable_chunked_encoding)forcer3cCsTt|tkr*|rtjntj}tdtn|dk rDt|tsDt dd|_ ||_ dS)z&Enables response compression encoding.z+Using boolean for force is deprecated #3318Nz1force should one of None, bool or ContentEncodingT) typeboolr!r'r)rRrSrT isinstancerLr7r8)rAr[r-r-r.enable_compressions   z!StreamResponse.enable_compressionzCIMultiDict[str]cCs|jS)N)r?)rAr-r-r.r2szStreamResponse.headerszSimpleCookie[str]cCs|jS)N)r9)rAr-r-r.cookiesszStreamResponse.cookies/)expiresdomainmax_agepathsecurehttponlyversionr&) namevaluerbrcrdrerfrgrhr&r3c Cs|j|} | dk r,| jdkr,|j|d||j|<|j|} |dk rR|| d<n| ddkrf| d=|dk rv|| d<|dk rt|| d<nd| kr| d=|| d<|dk r|| d<|dk r|| d <| dk r| | d <| dk r| | d <dS) zSet or update response cookie. Sets new cookie or updates existent with new value. Also updates only those params which are not None. NrKrbzThu, 01 Jan 1970 00:00:00 GMTrczmax-agererfrgrhr&)r9get coded_valuepopstr) rArirjrbrcrdrerfrgrhr&oldcr-r-r. set_cookies0    zStreamResponse.set_cookie)rcre)rircrer3cCs(|j|d|j|ddd||ddS)zBDelete cookie. Creates new empty expired cookie. NrKrzThu, 01 Jan 1970 00:00:00 GMT)rdrbrcre)r9rmrq)rArircrer-r-r. del_cookieszStreamResponse.del_cookiecstjS)N)supercontent_length)rA) __class__r-r.rtszStreamResponse.content_length)rjr3cCsD|dk r0t|}|jrtdt||jtj<n|jtjddS)NzZsz?StreamResponse._generate_content_type_header..)rzrLrwjoinitemsr?)rArparamsr|r-r-r.rxUsz,StreamResponse._generate_content_type_header)codingr3csH|tjkrD|jdk st|j|jtj<|j|j|j tj ddS)N) r!r)r;rLrjr?rCONTENT_ENCODINGr_ZpopallrX)rArr-r-r._do_start_compressionas  z$StreamResponse._do_start_compressionr%)requestr3cs^|jr||jIdHn@|jtjd}x*tD]"}|j|kr4||IdHdSq4WdS)NrK) r8rr2rkrACCEPT_ENCODINGr{r!rj)rAraccept_encodingrr-r-r._start_compressionjs  z!StreamResponse._start_compressioncs*|jr dS|jdk r|jS||IdHS)N)r<r;_start)rArr-r-r.preparets  zStreamResponse.preparecsB||_|j}|_|IdH||IdH|IdH|S)N)r:r;_prepare_headersZ _prepare_hook_write_headers)rArwriterr-r-r.r|s  zStreamResponse._startcs|j}|dk st|j}|dk s$t|j}|dkr8|j}||_|j}|j}x4|jD]&}|j dddd}| t j |qVW|j r||IdH|jr|tkrtd|j|d|t j<t j|kr|t j=nr|jrL|j|_|jdkr.|tkr(|d|t j<t j|kr,|t j=nd}n|tkrL|jdkrL|t j=|t jd|t jt|t jtt j |kr|r|t!krd |t j <n|tkrd |t j <dS) NrK)headerrz@Using chunked encoding is forbidden for HTTP/{0.major}.{0.minor}rGF)defgzapplication/octet-streamz keep-aliveclose)"r:rLr;r5rOrhr?r9valuesoutputaddrZ SET_COOKIEr7rr6rrYformatZenable_chunkingZTRANSFER_ENCODINGrX _length_checkrtlengthr0 setdefaultrZDATErZSERVERrZ CONNECTIONr)rArrrOrhr2cookierjr-r-r.rsX               zStreamResponse._prepare_headerscs^|j}|dk st|j}|dk s$t|j}d|d|d|j|j}|||jIdHdS)NzHTTP/{}.{} {} {}rr) r:rLr;rhrrFrIZ write_headersr?)rArrrhZ status_liner-r-r.rs  zStreamResponse._write_headers)datar3csVt|tttfs tdt||jr.td|jdkr@td|j |IdHdS)Nz#data argument must be byte-ish (%r)z%Cannot call write() after write_eof()z$Cannot call write() before prepare()) r^bytes bytearray memoryviewrLr\r<rYr;write)rArr-r-r.rs zStreamResponse.writecsD|jrtd|jdk s tdtjdtdd|jIdHdS)NzEOF has already been sentzResponse has not been startedz2drain method is deprecated, use await resp.write()) stacklevel)r<rLr;rRrSrTdrain)rAr-r-r.rszStreamResponse.draincsnt|tttfs tdt||jr*dS|jdk s) r<rCr:rLmethodrerur*r1)rAinfor-r-r.__repr__szStreamResponse.__repr__)keyr3cCs |j|S)N)r>)rArr-r-r. __getitem__szStreamResponse.__getitem__)rrjr3cCs||j|<dS)N)r>)rArrjr-r-r. __setitem__szStreamResponse.__setitem__cCs |j|=dS)N)r>)rArr-r-r. __delitem__szStreamResponse.__delitem__cCs t|jS)N)lenr>)rAr-r-r.__len__szStreamResponse.__len__cCs t|jS)N)iterr>)rAr-r-r.__iter__szStreamResponse.__iter__cCs tt|S)N)hashid)rAr-r-r.__hash__ szStreamResponse.__hash__)otherr3cCs||kS)Nr-)rArr-r-r.__eq__szStreamResponse.__eq__)N)N)r)Cr*r+r,rrMr rnr rBpropertyr]rCrDr0rGrHr1rr r r@rOrPrQrVrZrr!r_r2r`rqrrrtsetterrvryrrrrrrrxrrrrrrrrrrrrrrrrrr rrobjectr __classcell__r-r-)rur.r"Cs  >(      :    r"c sVeZdZdddddddddd eeeeeeeeeeeeeeeedd fddZ e ee e e fddd Zejejejfe eedd d d Ze eedd d Zejedddd Ze eedfdd ZejeeddddZd"e ddfdd Zdedfdd ZeddddZeddfd d! ZZS)#r#Nr/) bodyr0r1textr2rvryzlib_executor_size zlib_executor) rr0r1rr2rvryrrr3c s^|dk r|dk rtd|dkr(t} nt|tssT  0     Rf(