
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`Zf                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZ ddlm Z m!Z! dd	l"m#Z# dd
l$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- ddl!m.Z. ddl/m0Z0m1Z1 dZ2er<ddl3m4Z4 ee5ef Z6nej"jZ6e%sTdej7d< G dd dej8Z9G dd de6e&Z:G dd de:Z;e(fddddddej<deee5 ee= e>ee5 ee1 e5e0e;d	ddZ?dS )    N)Executor)	parsedate)MorselSimpleCookie)
TYPE_CHECKINGAnyDictIteratorMappingMutableMappingOptionalTupleUnioncast)CIMultiDictistr   )hdrspayload)AbstractStreamWriter)PY_38HeadersMixinrfc822_formatted_timesentinel)	RESPONSESSERVER_SOFTWAREHttpVersion10HttpVersion11)Payload)JSONEncoderLooseHeaders)ContentCodingStreamResponseResponsejson_response)BaseRequestZSameSitesamesitec                   @   s   e Zd ZdZdZdZdS )r!   deflategzipidentityN)__name__
__module____qualname__r'   r(   r)    r-   r-   G/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_response.pyr!   4   s   r!   c                       s  e Zd ZdZddddeee ee ddddZe	e
dd	d
Ze	ddddZe	edddZe	e
dddZe	e
dddZe	edddZdefeee eeeeef f ddddZe	ee
 dddZddddZe	edddZe	eddd Zdpee dd!d"d#Zdqeee
ef  dd$d%d&Ze	d'dd(d)Ze	d*dd+d,Zdddd-ddddd.eeee ee eeeef  eee
 ee
 ee ee dd/d0d1Zdd-d2eee edd3d4d5Z e	ee d fd6d7Z!e!j"ee dd8d9d7Z!e	ed fd:d;Z#e#j"edd8d<d;Z#e	ee d fd=d>Z$e$j"ee dd8d?d>Z$e	ee%j% dd@dAZ&e&j"eeee'e%j%ef  dd8dBdAZ&e(j)fe*ddCdDdEZ+eddFdGdHZ,dIddJdKdLZ-dIee. dJdMdNZ/dIe.dJdOdPZ0dddQdRZ1dddSdTZ2e3ddUdVdWZ4dddXdYZ5dre3ddUd[d\Z6edd]d^Z7ee8d_d`daZ9ee8ddbdcddZ:edd_dedfZ;eddgdhZ<e=e ddidjZ>eddkdlZ?e@e
dmdndoZA  ZBS )sr"   T   Nstatusreasonheaders)r1   r2   r3   returnc                C   sp   d | _ d | _d| _d| _d | _t | _d | _d | _d| _	d| _
i | _|d k	rXt|| _nt | _| || d S )NFr   )_body_keep_alive_chunked_compression_compression_forcer   _cookies_req_payload_writer	_eof_sent_body_length_stater   _headers
set_status)selfr1   r2   r3   r-   r-   r.   __init__G   s    zStreamResponse.__init__r4   c                 C   s
   | j d k	S N)r<   rB   r-   r-   r.   preparedb   s    zStreamResponse.preparedzasyncio.Task[None]c                 C   s   t | jdd S )Ntask)getattrr;   rF   r-   r-   r.   rH   f   s    zStreamResponse.taskc                 C   s   | j S rE   )_statusrF   r-   r-   r.   r1   j   s    zStreamResponse.statusc                 C   s   | j S rE   )r7   rF   r-   r-   r.   chunkedn   s    zStreamResponse.chunkedc                 C   s   | j S rE   )r8   rF   r-   r-   r.   compressionr   s    zStreamResponse.compressionc                 C   s   | j S rE   )_reasonrF   r-   r-   r.   r2   v   s    zStreamResponse.reason)r1   r2   
_RESPONSESr4   c                 C   sV   | j rtdt|| _|d krLz|| j d }W n tk
rJ   d}Y nX || _d S )NzGCannot change the response status code after the headers have been sentr    )rG   AssertionErrorintrJ   	ExceptionrM   )rB   r1   r2   rN   r-   r-   r.   rA   z   s    

zStreamResponse.set_statusc                 C   s   | j S rE   r6   rF   r-   r-   r.   
keep_alive   s    zStreamResponse.keep_alivec                 C   s
   d| _ d S )NFrS   rF   r-   r-   r.   force_close   s    zStreamResponse.force_closec                 C   s   | j S rE   )r>   rF   r-   r-   r.   body_length   s    zStreamResponse.body_lengthc                 C   s   t dt | jst| jjS )Nzoutput_length is deprecated)warningswarnDeprecationWarningr<   rP   buffer_sizerF   r-   r-   r.   output_length   s    
zStreamResponse.output_length)
chunk_sizer4   c                 C   s2   d| _ tj| jkrtd|dk	r.tdt dS )z,Enables automatic chunked transfer encoding.Tz>You can't enable chunked encoding when a content length is setNzChunk size is deprecated #1615)r7   r   CONTENT_LENGTHr@   RuntimeErrorrW   rX   rY   )rB   r\   r-   r-   r.   enable_chunked_encoding   s    z&StreamResponse.enable_chunked_encoding)forcer4   c                 C   sT   t |tkr*|rtjntj}tdt n|dk	rDt|tsDt	dd| _
|| _dS )z&Enables response compression encoding.z+Using boolean for force is deprecated #3318Nz1force should one of None, bool or ContentEncodingT)typeboolr!   r'   r)   rW   rX   rY   
isinstancerP   r8   r9   )rB   r`   r-   r-   r.   enable_compression   s     z!StreamResponse.enable_compressionzCIMultiDict[str]c                 C   s   | j S rE   )r@   rF   r-   r-   r.   r3      s    zStreamResponse.headerszSimpleCookie[str]c                 C   s   | j S rE   )r:   rF   r-   r-   r.   cookies   s    zStreamResponse.cookies/)expiresdomainmax_agepathsecurehttponlyversionr&   )namevaluerg   rh   ri   rj   rk   rl   rm   r&   r4   c                C   s   | j |}|dk	r,|jdkr,| j |d || j |< | j | }|dk	rR||d< n|ddkrf|d= |dk	rv||d< |dk	rt||d< nd|kr|d= ||d< |dk	r||d< |dk	r||d	< |	dk	r|	|d
< |
dk	r|
|d< dS )zSet or update response cookie.

        Sets new cookie or updates existent with new value.
        Also updates only those params which are not None.
        NrO   rg   Thu, 01 Jan 1970 00:00:00 GMTrh   zmax-agerj   rk   rl   rm   r&   )r:   getZcoded_valuepopstr)rB   rn   ro   rg   rh   ri   rj   rk   rl   rm   r&   oldcr-   r-   r.   
set_cookie   s0    


zStreamResponse.set_cookie)rh   rj   )rn   rh   rj   r4   c                C   s(   | j |d | j|ddd||d dS )zBDelete cookie.

        Creates new empty expired cookie.
        NrO   r   rp   )ri   rg   rh   rj   )r:   rr   rv   )rB   rn   rh   rj   r-   r-   r.   
del_cookie   s    zStreamResponse.del_cookiec                    s   t  jS rE   )supercontent_lengthrF   	__class__r-   r.   ry     s    zStreamResponse.content_lengthro   r4   c                 C   sD   |d k	r0t |}| jrtdt|| jtj< n| jtjd  d S )Nz<You can't set content length when chunked encoding is enable)rQ   r7   r^   rs   r@   r   r]   rr   rB   ro   r-   r-   r.   ry     s    c                    s   t  jS rE   )rx   content_typerF   rz   r-   r.   r~     s    zStreamResponse.content_typec                 C   s   | j  t|| _|   d S rE   )r~   rs   _content_type_generate_content_type_headerr}   r-   r-   r.   r~     s    
c                    s   t  jS rE   )rx   charsetrF   rz   r-   r.   r   #  s    zStreamResponse.charsetc                 C   sZ   | j }|dkrtd| jd k	s$t|d kr<| jdd  nt| | jd< |   d S )Napplication/octet-streamzYSetting charset for application/octet-stream doesn't make sense, setup content_type firstr   )r~   r^   _content_dictrP   rr   rs   lowerr   )rB   ro   ctyper-   r-   r.   r   (  s    c                 C   sF   | j tj}|dk	rBt|}|dk	rBtj|dd dtjjiS dS )zuThe value of Last-Modified HTTP header, or None.

        This header is represented as a `datetime` object.
        N   tzinfo)r@   rq   r   LAST_MODIFIEDr   datetimetimezoneutc)rB   Zhttpdate	timetupler-   r-   r.   last_modified7  s    zStreamResponse.last_modifiedc                 C   s   |d kr| j tjd  nlt|ttfrJtdt	t
|| j tj< n<t|tjrptd| | j tj< nt|tr|| j tj< d S )Nz%a, %d %b %Y %H:%M:%S GMT)r@   rr   r   r   rc   rQ   floattimestrftimegmtimemathceilr   utctimetuplers   r}   r-   r-   r.   r   D  s      
)CONTENT_TYPEr4   c                 C   s^   | j d k	st| jd k	stddd | j  D }|rJ| jd | }n| j}|| j|< d S )Nz; c                 s   s    | ]\}}| d | V  qdS )=Nr-   ).0kvr-   r-   r.   	<genexpr>Z  s     z?StreamResponse._generate_content_type_header.<locals>.<genexpr>)r   rP   r   joinitemsr@   )rB   r   paramsr   r-   r-   r.   r   U  s    z,StreamResponse._generate_content_type_headercodingr4   c                    sH   |t jkrD| jd k	st|j| jtj< | j|j | j	tj
d  d S rE   )r!   r)   r<   rP   ro   r@   r   CONTENT_ENCODINGrd   Zpopallr]   )rB   r   r-   r-   r.   _do_start_compressiona  s
    
z$StreamResponse._do_start_compressionr%   requestr4   c                    s\   | j r| | j I d H  n>|jtjd }tD ]$}|j|kr2| |I d H   d S q2d S )NrO   )	r9   r   r3   rq   r   ZACCEPT_ENCODINGr   r!   ro   )rB   r   Zaccept_encodingr   r-   r-   r.   _start_compressionj  s    
z!StreamResponse._start_compressionc                    s*   | j r
d S | jd k	r| jS | |I d H S rE   )r=   r<   _startrB   r   r-   r-   r.   preparet  s
    
zStreamResponse.preparec                    sB   || _ |j }| _|  I d H  || I d H  |  I d H  |S rE   )r;   r<   _prepare_headersZ_prepare_hook_write_headers)rB   r   writerr-   r-   r.   r   |  s    zStreamResponse._startc                    s  | j }|d k	st| j}|d k	s$t| j}|d kr8|j}|| _|j}| j}| j D ]&}|j	dddd  }|
tj| qT| jr| |I d H  | jr|tkrtd|j|  d|tj< tj|kr|tj= nr| jrH| j|_|jd kr*|tkr$|  d|tj< tj|kr(|tj= nd}n|tkrH| jdkrH|tj= |tjd |tjt  |tjt tj |kr|r|t!krd	|tj < n|tkrd
|tj < d S )NrO   )headerr   z@Using chunked encoding is forbidden for HTTP/{0.major}.{0.minor}rK   F)d   e   f   g      r   z
keep-aliveclose)"r;   rP   r<   r6   rT   rm   r@   r:   valuesoutputaddr   Z
SET_COOKIEr8   r   r7   r   r^   formatZenable_chunkingZTRANSFER_ENCODINGr]   _length_checkry   lengthr1   
setdefaultr   ZDATEr   ZSERVERr   Z
CONNECTIONr   )rB   r   r   rT   rm   r3   Zcookiero   r-   r-   r.   r     s\    







zStreamResponse._prepare_headersc                    s^   | j }|d k	st| j}|d k	s$t|j}d|d |d | j| j}||| jI d H  d S )NzHTTP/{}.{} {} {}r   r   )	r;   rP   r<   rm   r   rJ   rM   Zwrite_headersr@   )rB   r   r   rm   Zstatus_liner-   r-   r.   r     s       zStreamResponse._write_headersdatar4   c                    sV   t |tttfs tdt| | jr.td| jd kr@td| j	|I d H  d S )N#data argument must be byte-ish (%r)z%Cannot call write() after write_eof()z$Cannot call write() before prepare())
rc   bytes	bytearray
memoryviewrP   ra   r=   r^   r<   writerB   r   r-   r-   r.   r     s     

zStreamResponse.writec                    sD   | j rtd| jd k	s tdtjdtdd | j I d H  d S )NzEOF has already been sentResponse has not been startedz2drain method is deprecated, use await resp.write()   )
stacklevel)r=   rP   r<   rW   rX   rY   drainrF   r-   r-   r.   r     s    zStreamResponse.drain    c                    sn   t |tttfs tdt| | jr*d S | jd k	s<td| j|I d H  d| _d | _	| jj
| _d | _d S )Nr   r   T)rc   r   r   r   rP   ra   r=   r<   	write_eofr;   Zoutput_sizer>   r   r-   r-   r.   r     s     

zStreamResponse.write_eofc                 C   s\   | j rd}n2| jr:| jd k	s t| jj d| jj d}nd}d| jj d| j d| dS )Neof znot prepared<>)	r=   rG   r;   rP   methodrj   r{   r*   r2   )rB   infor-   r-   r.   __repr__  s    zStreamResponse.__repr__)keyr4   c                 C   s
   | j | S rE   r?   rB   r   r-   r-   r.   __getitem__  s    zStreamResponse.__getitem__)r   ro   r4   c                 C   s   || j |< d S rE   r   )rB   r   ro   r-   r-   r.   __setitem__  s    zStreamResponse.__setitem__c                 C   s   | j |= d S rE   r   r   r-   r-   r.   __delitem__  s    zStreamResponse.__delitem__c                 C   s
   t | jS rE   )lenr?   rF   r-   r-   r.   __len__  s    zStreamResponse.__len__c                 C   s
   t | jS rE   )iterr?   rF   r-   r-   r.   __iter__  s    zStreamResponse.__iter__c                 C   s   t t| S rE   )hashidrF   r-   r-   r.   __hash__  s    zStreamResponse.__hash__)otherr4   c                 C   s   | |kS rE   r-   )rB   r   r-   r-   r.   __eq__  s    zStreamResponse.__eq__)N)N)r   )Cr*   r+   r,   r   rQ   r   rs   r    rC   propertyrb   rG   rH   r1   rK   rL   r2   r   r
   r   rA   rT   rU   rV   r[   r_   r   r!   rd   r3   re   rv   rw   ry   setterr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   objectr   __classcell__r-   r-   rz   r.   r"   C   s    5   	

:

r"   c                       sV  e Zd Zdddddddddd	eeee ee ee ee ee ee ee dd
 fddZ	e
eeeef  ddd	Zejejejfeeedd
dd	Ze
ee dddZejeddddZe
ee d fddZejee ddddZd"edd fddZded fddZeddddZedd fd d!Z  ZS )#r#   Nr/   )	bodyr1   r2   textr3   r~   r   zlib_executor_sizezlib_executor)
r   r1   r2   r   r3   r~   r   r   r   r4   c       	            s^  |d k	r|d k	rt d|d kr(t }
nt|ts<t|}
n|}
|d k	rXd|krXt d|d k	rtj|
kr||sr|rt dnRt|tstdt| |d krd}|d krd}|d | |
tj< ||}d }nNtj|
kr|d k	s|d k	rt dn*|d k	r|d k	r|d| 7 }||
tj< t	 j
|||
d	 |d k	rB|| _n|| _d | _|| _|	| _d S )
Nz&body and text are not allowed togetherr   z,charset must not be in content_type argumentzPpassing both Content-Type header and content_type or charset params is forbiddentext argument must be str (%r)
text/plainutf-8z
; charset=r0   )
ValueErrorr   rc   r   r   rs   	TypeErrorra   encoderx   rC   r   r   _compressed_body_zlib_executor_size_zlib_executor)rB   r   r1   r2   r   r3   r~   r   r   r   Zreal_headersrz   r-   r.   rC     sP    









zResponse.__init__rD   c                 C   s   | j S rE   )r5   rF   r-   r-   r.   r   Y  s    zResponse.body)r   r   r]   r4   c                 C   s   |d krd | _ d| _nt|ttfr2|| _ d| _nztj| | _ }W n& tjk
rn   t	dt
| Y nX d| _| j}| js||kr|j}|d k	rt|||< ||kr|j||< |jr|j D ]\}}||kr|||< qd | _d S )NFzUnsupported body type %rT)r5   _body_payloadrc   r   r   r   ZPAYLOAD_REGISTRYrq   LookupErrorr   ra   r@   r7   sizers   r~   r3   r   r   )rB   r   r   r]   r3   r   r   ro   r-   r-   r.   r   ]  s.    

c                 C   s    | j d krd S | j | jpdS )Nr   )r5   decoder   rF   r-   r-   r.   r     s    
zResponse.text)r   r4   c                 C   s`   |d ks"t |ts"tdt| | jdkr2d| _| jd krBd| _|| j| _d| _d | _	d S )Nr   r   r   r   F)
rc   rs   rP   ra   r~   r   r   r5   r   r   )rB   r   r-   r-   r.   r     s    
 


c                    sX   | j r
d S tj| jkrt jS | jd k	r2t| jS | jr<d S | j	d k	rPt| j	S dS d S )Nr   )
r7   r   r]   r@   rx   ry   r   r   r   r5   rF   rz   r-   r.   ry     s    



zResponse.content_lengthr|   c                 C   s   t dd S )Nz#Content length is set automatically)r^   r}   r-   r-   r.   ry     s    r   r   c                    s   | j r
d S | jd kr| j}n| j}|r4td|| jd k	sBt| jd k	sPt|d k	r| jjtjksp| j	dkrt
  I d H  q| jrtt|}|| jI d H  t
  I d H  qt
 tt|I d H  nt
  I d H  d S )Nzdata arg is not supported, got )r   i0  )r=   r   r5   rP   r;   r<   _methodr   Z	METH_HEADrJ   rx   r   r   r   r   r   r   )rB   r   r   r   rz   r-   r.   r     s"    

zResponse.write_eofr%   r   c                    sX   | j sFtj| jkrF| jsF| jd k	r:tt| j| jtj< nd| jtj< t 	|I d H S )N0)
r7   r   r]   r@   r   r5   rs   r   rx   r   r   rz   r-   r.   r     s    
zResponse._start)	zlib_moder4   c                 C   sB   |dkst tj|d}| j}|d k	s*t |||  | _d S )Nr   )Zwbits)rP   zlibcompressobjr5   compressflushr   )rB   r   r   body_inr-   r-   r.   _compress_body  s
    zResponse._compress_bodyr   c                    s   | j s| jrt |I d H S |tjkr|tjkr<dtj ntj}| j	}|d k	sTt
| jd k	rt|| jkrt | j| j|I d H  n
| | | j}|d k	st
|j| jtj< tt|| jtj< d S )N   )r   r7   rx   r   r!   r)   r(   r   	MAX_WBITSr5   rP   r   r   asyncioZget_event_loopZrun_in_executorr   r   r   ro   r@   r   r   rs   r]   )rB   r   r   r   Zbody_outrz   r-   r.   r     s*    
  
zResponse._do_start_compression)r   )r*   r+   r,   r   rQ   r   rs   r    r   rC   r   r   r   r   r   r   r   r   r]   r   r   ry   r   r   r   r   r!   r   r   r-   r-   rz   r.   r#     sX   F(
r#   r/   zapplication/json)r   r   r1   r2   r3   r~   dumps)	r   r   r   r1   r2   r3   r~   r   r4   c                C   s6   | t k	r"|s|rtdn|| }t||||||dS )Nz3only one of data, text, or body should be specified)r   r   r1   r2   r3   r~   )r   r   r#   )r   r   r   r1   r2   r3   r~   r   r-   r-   r.   r$     s    
r$   )@r   collections.abccollectionsr   enumjsonr   r   rW   r   concurrent.futuresr   email.utilsr   Zhttp.cookiesr   r   typingr   r   r   r	   r
   r   r   r   r   r   Z	multidictr   r   rO   r   r   abcr   Zhelpersr   r   r   r   httpr   r   r   r   r   Ztypedefsr   r    __all__Zweb_requestr%   rs   Z	BaseClassZ	_reservedEnumr!   r"   r#   r   r   rQ   r$   r-   r-   r-   r.   <module>   sj   0
   R f