U
    ;gl                     @   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	m
Z
 d dlmZ d dlmZ d dl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! 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.m/Z/ ddlm0Z0 ddl1m2Z2m3Z3 dd eD Z4dZ5dZ6erZddl7m8Z8 ee9ef Z:nejjZ:G dd dej;Z<dd e<D Z=G dd de:e&Z>G dd de>Z?e*fddddddej@deee9 eeA eBee9 ee3 e9e2e?d	dd ZCdS )!    N)Executor)
HTTPStatus)SimpleCookie)TYPE_CHECKINGAnyDictIteratorMutableMappingOptionalUnioncast)CIMultiDictistr   )hdrspayload)AbstractStreamWriter)ZLibCompressor)
ETAG_ANYQUOTED_ETAG_REETagHeadersMixinmust_be_empty_bodyparse_http_daterfc822_formatted_timesentinelshould_remove_content_lengthvalidate_etag_value)SERVER_SOFTWAREHttpVersion10HttpVersion11)Payload)JSONEncoderLooseHeadersc                 C   s   i | ]}|j |jqS  )valuephrase).0Zhttp_statusr$   r$   T/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/web_response.py
<dictcomp>,   s      r)   i   )ContentCodingStreamResponseResponsejson_response)BaseRequestc                   @   s   e Zd ZdZdZdZdS )r*   deflategzipidentityN)__name__
__module____qualname__r/   r0   r1   r$   r$   r$   r(   r*   ;   s   r*   c                 C   s   i | ]}|j |qS r$   r%   )r'   codingr$   r$   r(   r)   E   s      c                       s4  e Zd ZU dZedeeef ed< 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due	e
e ddddZe	e
e 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dve
e	 dd$d%d&Zdwe
eeef  dd'd(d)Zed*d	d+d,Zee d	d-d.Z!dddd/ddddd0eee
e e
e e
ee	ef  ee
e e
e e
e e
e dd1d2d3Z"dd/d4ee
e edd5d6d7Z#ee
e	 d	 fd8d9Z$e$j%e
e	 dd:d;d9Z$eed	 f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:dAd@Z'ee
e(j( d	dBdCZ)e)j%e
ee	e*e(j(ef  dd:dDdCZ)ee
e+ d	dEdFZ,e,j%e
ee+ef  dd:dGdFZ,e-j.fe/ddHdIdJZ0eddKdLdMZ1dNddOdPdQZ2dNe
e3 dOdRdSZ4dNe3dOdTdUZ5dd	dVdWZ6dd	dXdYZ7eddZd[d\Z8dd	d]d^Z9dxeddZd`daZ:ed	dbdcZ;ee<dddedfZ=ee<ddgdhdiZ>eddddjdkZ?e	d	dldmZ@eAe d	dndoZBe	d	dpdqZCeDedrdsdtZE  ZFS )yr+   TN_body   statusreasonheaders)r:   r;   r<   returnc                C   sv   d | _ d | _d| _d| _d | _t | _d | _d | _d| _	d | _
d| _i | _|d k	r^t|| _nt | _| || d S )NFr   )r7   _keep_alive_chunked_compression_compression_forcer   _cookies_req_payload_writer	_eof_sent_must_be_empty_body_body_length_stater   _headers_set_status)selfr:   r;   r<   r$   r$   r(   __init__R   s     zStreamResponse.__init__r=   c                 C   s   | j p| jd k	S N)rE   rD   rK   r$   r$   r(   preparedn   s    zStreamResponse.preparedzOptional[asyncio.Task[None]]c                 C   s   | j r| j jS d S d S rN   )rC   taskrO   r$   r$   r(   rQ   r   s    zStreamResponse.taskc                 C   s   | j S rN   )_statusrO   r$   r$   r(   r:   y   s    zStreamResponse.statusc                 C   s   | j S rN   )r?   rO   r$   r$   r(   chunked}   s    zStreamResponse.chunkedc                 C   s   | j S rN   )r@   rO   r$   r$   r(   compression   s    zStreamResponse.compressionc                 C   s   | j S rN   )_reasonrO   r$   r$   r(   r;      s    zStreamResponse.reason)r:   r;   r=   c                 C   s   | j rtd| || d S )NzGCannot change the response status code after the headers have been sent)rP   AssertionErrorrJ   rK   r:   r;   r$   r$   r(   
set_status   s
    zStreamResponse.set_statusc                 C   s<   t || _|d kr"t| jd}nd|kr2td|| _d S )N 
zReason cannot contain \n)intrR   REASON_PHRASESget
ValueErrorrU   rW   r$   r$   r(   rJ      s    
zStreamResponse._set_statusc                 C   s   | j S rN   r>   rO   r$   r$   r(   
keep_alive   s    zStreamResponse.keep_alivec                 C   s
   d| _ d S )NFr_   rO   r$   r$   r(   force_close   s    zStreamResponse.force_closec                 C   s   | j S rN   )rG   rO   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DeprecationWarningrD   rV   buffer_sizerO   r$   r$   r(   output_length   s    
zStreamResponse.output_length)
chunk_sizer=   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)r?   r   CONTENT_LENGTHrI   RuntimeErrorrc   rd   re   )rK   rh   r$   r$   r(   enable_chunked_encoding   s    z&StreamResponse.enable_chunked_encoding)forcer=   c                 C   sR   t |tr(|rtjntj}tdt n|dk	rBt |tsBtdd| _	|| _
dS )z&Enables response compression encoding.z+Using boolean for force is deprecated #3318Nz1force should one of None, bool or ContentEncodingT)
isinstanceboolr*   r/   r1   rc   rd   re   rV   r@   rA   )rK   rl   r$   r$   r(   enable_compression   s    
 z!StreamResponse.enable_compressionzCIMultiDict[str]c                 C   s   | j S rN   )rI   rO   r$   r$   r(   r<      s    zStreamResponse.headersc                 C   s   | j S rN   )rB   rO   r$   r$   r(   cookies   s    zStreamResponse.cookies/)expiresdomainmax_agepathsecurehttponlyversionsamesite)namer%   rr   rs   rt   ru   rv   rw   rx   ry   r=   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.
        NrY   rr   Thu, 01 Jan 1970 00:00:00 GMTrs   zmax-ageru   rv   rw   rx   ry   )rB   r]   coded_valuepopstr)rK   rz   r%   rr   rs   rt   ru   rv   rw   rx   ry   oldcr$   r$   r(   
set_cookie   s0    


zStreamResponse.set_cookie)rs   ru   )rz   rs   ru   r=   c                C   s(   | j |d | j|ddd||d dS )zBDelete cookie.

        Creates new empty expired cookie.
        NrY   r   r{   )rt   rr   rs   ru   )rB   r}   r   )rK   rz   rs   ru   r$   r$   r(   
del_cookie  s    zStreamResponse.del_cookiec                    s   t  jS rN   )supercontent_lengthrO   	__class__r$   r(   r     s    zStreamResponse.content_lengthr%   r=   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)r[   r?   rj   r~   rI   r   ri   r}   rK   r%   r$   r$   r(   r     s    c                    s   t  jS rN   )r   content_typerO   r   r$   r(   r   '  s    zStreamResponse.content_typec                 C   s   | j  t|| _|   d S rN   )r   r~   _content_type_generate_content_type_headerr   r$   r$   r(   r   ,  s    
c                    s   t  jS rN   )r   charsetrO   r   r$   r(   r   2  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   rj   _content_dictrV   r}   r~   lowerr   )rK   r%   ctyper$   r$   r(   r   7  s    c                 C   s   t | jtjS )zuThe value of Last-Modified HTTP header, or None.

        This header is represented as a `datetime` object.
        )r   rI   r]   r   LAST_MODIFIEDrO   r$   r$   r(   last_modifiedF  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)rI   r}   r   r   rm   r[   floattimestrftimegmtimemathceildatetimeutctimetupler~   r   r$   r$   r(   r   N  s      
c                 C   sZ   | j tj}|sd S |tkr(ttdS t|}|s:d S |dd\}}tt	||dS )Nr5   r      )is_weakr%   )
rI   r]   r   ETAGr   r   r   	fullmatchgrouprn   )rK   Zquoted_valuematchr   r%   r$   r$   r(   etag_  s    

zStreamResponse.etagc                 C   s   |d kr| j tjd  nt|tr,|tks@t|trN|jtkrNt| j tj< nt|trvt	| d| d| j tj< ndt|trt|jtrt	|j |j
rd|j dnd|j d}|| j tj< ntdt| dd S )N"zW/"zUnsupported etag type: z . etag must be str, ETag or None)rI   r}   r   r   rm   r~   r   r   r%   r   r   r^   type)rK   r%   Z	hdr_valuer$   r$   r(   r   o  s$    

")CONTENT_TYPEr=   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$   )r'   kvr$   r$   r(   	<genexpr>  s     z?StreamResponse._generate_content_type_header.<locals>.<genexpr>)r   rV   r   joinitemsrI   )rK   r   paramsr   r$   r$   r(   r     s    z,StreamResponse._generate_content_type_headerr6   r=   c                    sL   |t jkrd S | jd k	st|j| jtj< | j|j | j	tj
d  d S rN   )r*   r1   rD   rV   r%   rI   r   CONTENT_ENCODINGro   Zpopallri   )rK   r6   r$   r$   r(   _do_start_compression  s    
z$StreamResponse._do_start_compressionr.   requestr=   c                    sd   | j r| | j I d H  d S |jtjd }t D ]&\}}||kr8| |I d H   d S q8d S )NrY   )	rA   r   r<   r]   r   ACCEPT_ENCODINGr   CONTENT_CODINGSr   )rK   r   accept_encodingr%   r6   r$   r$   r(   _start_compression  s    z!StreamResponse._start_compressionc                    s:   | j r
d S | jd k	r| jS t|j| j| _| |I d H S rN   )rE   rD   r   methodr:   rF   _start)rK   r   r$   r$   r(   prepare  s    
zStreamResponse.preparec                    sB   || _ |j }| _|  I d H  || I d H  |  I d H  |S rN   )rC   rD   _prepare_headersZ_prepare_hook_write_headers)rK   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r| j D ]&}|j	dddd  }|
tj| qZ| jr| |I d H  | jr|tkrtd|j| js|  d|tj< tj|kr|tj= nN| jr0| j|_|jd kr0|tkr$| js0|  d|tj< n| js0d}| jrrtj|kr\t|j| jr\|tj= tj|kr|tj= n(| jr|jn| jdkr|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 )NrY   )headerr   z@Using chunked encoding is forbidden for HTTP/{0.major}.{0.minor}rS   Fr   r   z
keep-aliveclose)%rC   rV   rD   r>   r`   rx   rI   rB   valuesoutputaddr   Z
SET_COOKIEr@   r   r?   r    rj   formatrF   Zenable_chunkingZTRANSFER_ENCODINGri   _length_checkr   lengthr   r   r:   
setdefaultr   ZDATEr   ZSERVERr   Z
CONNECTIONr   )rK   r   r   r`   rx   r<   cookier%   r$   r$   r(   r     sn    



 


zStreamResponse._prepare_headersc                    sj   | j }|d k	st| j}|d k	s$t|j}d|d  d|d  d| j d| j }||| jI d H  d S )NzHTTP/r   .r    )rC   rV   rD   rx   rR   rU   Zwrite_headersrI   )rK   r   r   rx   Zstatus_liner$   r$   r(   r     s    (zStreamResponse._write_headersdatar=   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())
rm   bytes	bytearray
memoryviewrV   r   rE   rj   rD   writerK   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()r   )
stacklevel)rE   rV   rD   rc   rd   re   drainrO   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)rm   r   r   r   rV   r   rE   rD   	write_eofrC   Zoutput_sizerG   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eofr   znot prepared<>)	rE   rP   rC   rV   r   ru   r   r2   r;   )rK   infor$   r$   r(   __repr__+  s    zStreamResponse.__repr__)keyr=   c                 C   s
   | j | S rN   rH   rK   r   r$   r$   r(   __getitem__5  s    zStreamResponse.__getitem__)r   r%   r=   c                 C   s   || j |< d S rN   r   )rK   r   r%   r$   r$   r(   __setitem__8  s    zStreamResponse.__setitem__c                 C   s   | j |= d S rN   r   r   r$   r$   r(   __delitem__;  s    zStreamResponse.__delitem__c                 C   s
   t | jS rN   )lenrH   rO   r$   r$   r(   __len__>  s    zStreamResponse.__len__c                 C   s
   t | jS rN   )iterrH   rO   r$   r$   r(   __iter__A  s    zStreamResponse.__iter__c                 C   s   t t| S rN   )hashidrO   r$   r$   r(   __hash__D  s    zStreamResponse.__hash__)otherr=   c                 C   s   | |kS rN   r$   )rK   r   r$   r$   r(   __eq__G  s    zStreamResponse.__eq__)N)N)N)r   )Gr2   r3   r4   r   r   r   r   r!   __annotations__r[   r
   r~   r#   rL   propertyrn   rP   rQ   r:   rS   rT   r;   rX   rJ   r`   ra   rb   rg   rk   r*   ro   r<   r   rp   r   r   r   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   r   objectr   __classcell__r$   r$   r   r(   r+   L   s   
 
 4   

C


r+   c                       s4  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dd
dd	Ze
ee dddZejeddddZe
ee d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 fddZ  ZS ) r,   Nr8   )	bodyr:   r;   textr<   r   r   zlib_executor_sizezlib_executor)
r   r:   r;   r   r<   r   r   r   r   r=   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=r9   )r^   r   rm   r   r   r~   	TypeErrorr   encoder   rL   r   r   _compressed_body_zlib_executor_size_zlib_executor)rK   r   r:   r;   r   r<   r   r   r   r   Zreal_headersr   r$   r(   rL   L  sP    









zResponse.__init__rM   c                 C   s   | j S rN   )r7   rO   r$   r$   r(   r     s    zResponse.body)r   r=   c                 C   s   |d krd | _ nt|ttfr&|| _ nztj| | _ }W n& tjk
rb   tdt	| Y nX | j
}tj|kr|j|tj< |jr|j D ]\}}||kr|||< qd | _d S )NzUnsupported body type %r)r7   rm   r   r   r   ZPAYLOAD_REGISTRYr]   LookupErrorr^   r   rI   r   r   r   r<   r   r   )rK   r   r<   r   r%   r$   r$   r(   r     s     

c                 C   s    | j d krd S | j | jpdS )Nr   )r7   decoder   rO   r$   r$   r(   r     s    
zResponse.text)r   r=   c                 C   sZ   |d ks"t |ts"tdt| | jdkr2d| _| jd krBd| _|| j| _d | _d S )Nr   r   r   r   )	rm   r~   rV   r   r   r   r   r7   r   )rK   r   r$   r$   r(   r     s    
 


c                 C   sf   | j r
d S tj| jkr&t| jtj S | jd k	r:t| jS t| jt	rJd S | jd k	r^t| jS dS d S )Nr   )
r?   r   ri   rI   r[   r   r   rm   r7   r!   rO   r$   r$   r(   r     s    



zResponse.content_lengthr   c                 C   s   t dd S )Nz#Content length is set automatically)rj   r   r$   r$   r(   r     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s^| jrpt  I d H  nJt	| jt
r| j| jI d H  t  I d H  nt tt|I d H  d S )Nzdata arg is not supported, got )rE   r   r7   rV   rC   rD   rF   r   r   rm   r!   r   r   r   )rK   r   r   r   r$   r(   r     s    
zResponse.write_eofr.   r   c                    s   t j| jkr&t|j| jr| jt j= nz| jst| jt	rZ| jj
d k	rt| jj
| jt j< nF| jrjt| jnd}|dks| jdkr|j t jkrt|| jt j< t |I d H S )N0i0  )r   ri   rI   r   r   r:   r?   rm   r7   r!   sizer~   r   upperZ	METH_HEADr   r   )rK   r   Zbody_lenr   r$   r(   r     s    zResponse._startr   c                    s   | j st| jtr$t |I d H S |tjkr2d S t|j	| j
| jd}| jd k	sTt| j
d krt| jtkrtdt| j d || jI d H |  | _|j	| jtj< tt| j| jtj< d S )N)encodingZmax_sync_chunk_sizeexecutorz2Synchronous compression of large response bodies (z bytes) might block the async event loop. Consider providing a custom value to zlib_executor_size/zlib_executor response properties or disabling compression on it.)r?   rm   r7   r!   r   r   r*   r1   r   r%   r   r   rV   r   LARGE_BODY_SIZErc   rd   compressflushr   rI   r   r   r~   ri   )rK   r6   Z
compressorr   r$   r(   r     s$    
zResponse._do_start_compression)r   )r2   r3   r4   r   r[   r
   r~   r#   r   rL   r   r   r   r!   r   r   r   r   r   r   r   r*   r   r   r$   r$   r   r(   r,   K  sH   Dr,   r8   zapplication/json)r   r   r:   r;   r<   r   dumps)	r   r   r   r:   r;   r<   r   r  r=   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   r:   r;   r<   r   )r   r^   r,   )r   r   r   r:   r;   r<   r   r  r$   r$   r(   r-     s    
r-   )DZasynciocollections.abccollectionsr   enumjsonr   r   rc   concurrent.futuresr   httpr   http.cookiesr   typingr   r   r   r   r	   r
   r   r   Z	multidictr   r   rY   r   r   abcr   Zcompression_utilsr   Zhelpersr   r   r   r   r   r   r   r   r   r   r   r   r    r!   Ztypedefsr"   r#   r\   r   __all__Zweb_requestr.   r~   Z	BaseClassEnumr*   r   r+   r,   r  r   r[   r-   r$   r$   r$   r(   <module>   sn   (0
     O