a
    `gp                     @   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 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/m0Z0 ddlm1Z1 ddl2m3Z3m4Z4 dd eD Z5dZ6dZ7erbddl8m9Z9 ee:e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jAdeee: eeB eCee: ee4 e:e3e@d	dd ZDd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$   b/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/aiohttp/web_response.py
<dictcomp>-       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__r0   r1   r2   r$   r$   r$   r(   r+   <   s   r+   c                 C   s   i | ]}|j |qS r$   r%   )r'   codingr$   r$   r(   r)   F   r*   c                       s  e Zd ZU edeeef ed< dZdZ	dZ
ee ed< dZeed< dZeed< ejZeed< dZee ed	< dZed
 ed< dZee ed< dZeed< dZee ed< dZdZee ed< dddddeee 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'de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/d0Z-dee dd1d2d3Z.dejfeeeef  edd4d5d6Z/e!d7dd8d9Z0e!edd:d;Z1d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>d?d@Z2dd<ddddAeee eee ee ee ddBdCdDZ3e!ee d fdEdFZ4e4j5ee ddGdHdFZ4e!ed fdIdJZ6e6j5eddGdKdJZ6e!ee d fdLdMZ7e7j5ee ddGdNdMZ7e!ee8j8 ddOdPZ9e9j5eeee:e8j8ef  ddGdQdPZ9e!ee; ddRdSZ<e<j5eee;ef  ddGdTdSZ<e=j>fe?ddUdVdWZ@eddXdYdZZAd
dd[d\d]ZBd
ee d[d^d_ZCd
ed[d`daZDdddbdcZEdddddeZFeeeeGf ddfdgdhZHdddidjZIdeddfdldmZJeddndoZKeeLdpdqdrZMeeLddsdtduZNeddpdvdwZOeddxdyZPeQe ddzd{ZRedd|d}ZSeTed~ddZU  ZVS )r,   N_bodyT_keep_aliveF_chunked_compression_compression_strategy_compression_forcer/   _req_payload_writer	_eof_sent_must_be_empty_bodyr   _cookies   )statusreasonheaders_real_headers)rD   rE   rF   rG   returnc                C   sB   i | _ |dur|| _n|dur*t|| _nt | _| || dS )a;  Initialize a new stream response object.

        _real_headers is an internal parameter used to pass a pre-populated
        headers object. It is used by the `Response` class to avoid copying
        the headers when creating a new response object. It is not intended
        to be used by external code.
        N)_state_headersr   _set_status)selfrD   rE   rF   rG   r$   r$   r(   __init__^   s    zStreamResponse.__init__rH   c                 C   s   | j p| jd uS N)r@   r?   rL   r$   r$   r(   preparedx   s    zStreamResponse.preparedzOptional[asyncio.Task[None]]c                 C   s   | j r| j jS d S d S rO   )r>   taskrP   r$   r$   r(   rR   |   s    zStreamResponse.taskc                 C   s   | j S rO   )_statusrP   r$   r$   r(   rD      s    zStreamResponse.statusc                 C   s   | j S rO   )r:   rP   r$   r$   r(   chunked   s    zStreamResponse.chunkedc                 C   s   | j S rO   )r;   rP   r$   r$   r(   compression   s    zStreamResponse.compressionc                 C   s   | j S rO   )_reasonrP   r$   r$   r(   rE      s    zStreamResponse.reason)rD   rE   rH   c                 C   s   | j rJ d| || d S )NzGCannot change the response status code after the headers have been sent)rQ   rK   rL   rD   rE   r$   r$   r(   
set_status   s
    zStreamResponse.set_statusc                 C   s<   t || _|d u r"t| jd}nd|v r2td|| _d S )N 
zReason cannot contain \n)intrS   REASON_PHRASESget
ValueErrorrV   rW   r$   r$   r(   rK      s    
zStreamResponse._set_statusc                 C   s   | j S rO   r9   rP   r$   r$   r(   
keep_alive   s    zStreamResponse.keep_alivec                 C   s
   d| _ d S )NFr_   rP   r$   r$   r(   force_close   s    zStreamResponse.force_closec                 C   s   | j S rO   )_body_lengthrP   r$   r$   r(   body_length   s    zStreamResponse.body_lengthc                 C   s   t dt | jsJ | jjS )Nzoutput_length is deprecated)warningswarnDeprecationWarningr?   buffer_sizerP   r$   r$   r(   output_length   s    
zStreamResponse.output_length)
chunk_sizerH   c                 C   s2   t j| jv rtd|dur(tdt d| _dS )z,Enables automatic chunked transfer encoding.z>You can't enable chunked encoding when a content length is setNzChunk size is deprecated #1615T)r   CONTENT_LENGTHrJ   RuntimeErrorrd   re   rf   r:   )rL   ri   r$   r$   r(   enable_chunked_encoding   s    z&StreamResponse.enable_chunked_encoding)forcestrategyrH   c                 C   sX   t |tr(|rtjntj}tdt n|durBt |tsBJ 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+   r0   r2   rd   re   rf   r;   r=   r<   )rL   rm   rn   r$   r$   r(   enable_compression   s    
z!StreamResponse.enable_compressionzCIMultiDict[str]c                 C   s   | j S rO   )rJ   rP   r$   r$   r(   rF      s    zStreamResponse.headersc                 C   s   | j d u rt | _ | j S rO   )rB   r   rP   r$   r$   r(   cookies   s    
zStreamResponse.cookies/)expiresdomainmax_agepathsecurehttponlyversionsamesite)namer%   rt   ru   rv   rw   rx   ry   rz   r{   rH   c                C   s   | j du rt | _ || j |< | j | }|dur8||d< n|ddkrL|d= |dur\||d< |durrt||d< nd|v r|d= ||d< |dur||d< |dur||d< |	dur|	|d	< |
du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.
        Nrt   Thu, 01 Jan 1970 00:00:00 GMTru   zmax-agerw   rx   ry   rz   r{   )rB   r   r]   str)rL   r|   r%   rt   ru   rv   rw   rx   ry   rz   r{   cr$   r$   r(   
set_cookie   s.    



zStreamResponse.set_cookie)ru   rw   rx   ry   r{   )r|   ru   rw   rx   ry   r{   rH   c                C   s8   | j dur| j |d | j|ddd|||||d	 dS )zBDelete cookie.

        Creates new empty expired cookie.
        NrY   r   r}   )rv   rt   ru   rw   rx   ry   r{   )rB   popr   )rL   r|   ru   rw   rx   ry   r{   r$   r$   r(   
del_cookie  s    
zStreamResponse.del_cookiec                    s   t  jS rO   )supercontent_lengthrP   	__class__r$   r(   r   -  s    zStreamResponse.content_lengthr%   rH   c                 C   sD   |d u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:   rk   r~   rJ   r   rj   r   rL   r%   r$   r$   r(   r   2  s    c                    s   t  jS rO   )r   content_typerP   r   r$   r(   r   >  s    zStreamResponse.content_typec                 C   s   | j  t|| _|   d S rO   )r   r~   _content_type_generate_content_type_headerr   r$   r$   r(   r   C  s    
c                    s   t  jS rO   )r   charsetrP   r   r$   r(   r   I  s    zStreamResponse.charsetc                 C   sZ   | j }|dkrtd| jd us$J |d u 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   rk   _content_dictr   r~   lowerr   )rL   r%   ctyper$   r$   r(   r   N  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   rJ   r]   r   LAST_MODIFIEDrP   r$   r$   r(   last_modified]  s    zStreamResponse.last_modifiedc                 C   s   |d u 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)rJ   r   r   r   ro   r[   floattimestrftimegmtimemathceildatetimeutctimetupler~   r   r$   r$   r(   r   e  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 )Nr6   r      )is_weakr%   )
rJ   r]   r   ETAGr   r   r   	fullmatchgrouprp   )rL   Zquoted_valuematchr   r%   r$   r$   r(   etagv  s    

zStreamResponse.etagc                 C   s   |d u 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)rJ   r   r   r   ro   r~   r   r   r%   r   r   r^   type)rL   r%   Z	hdr_valuer$   r$   r(   r     s$    

")CONTENT_TYPErH   c                 C   s^   | j d usJ | jd usJ 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>  r*   z?StreamResponse._generate_content_type_header.<locals>.<genexpr>)r   r   joinitemsrJ   )rL   r   paramsr   r$   r$   r(   r     s    z,StreamResponse._generate_content_type_headerr7   rH   c                    sP   |t ju rd S | jd usJ |j| jtj< | j|j| j | j	tj
d  d S rO   )r+   r2   r?   r%   rJ   r   CONTENT_ENCODINGrq   r<   Zpopallrj   )rL   r7   r$   r$   r(   _do_start_compression  s    
z$StreamResponse._do_start_compressionrequestrH   c                    sd   | j r| | j I d H  d S |jtjd }t D ]&\}}||v r8| |I d H   d S q8d S )NrY   )	r=   r   rF   r]   r   ACCEPT_ENCODINGr   CONTENT_CODINGSr   )rL   r   accept_encodingr%   r7   r$   r$   r(   _start_compression  s    z!StreamResponse._start_compressionc                    s:   | j r
d S | jd ur| jS t|j| j| _| |I d H S rO   )r@   r?   r   methodrD   rA   _start)rL   r   r$   r$   r(   prepare  s    
zStreamResponse.preparec                    sB   || _ |j }| _|  I d H  || I d H  |  I d H  |S rO   )r>   r?   _prepare_headersZ_prepare_hook_write_headers)rL   r   writerr$   r$   r(   r     s    zStreamResponse._startc                    s  | j }|d usJ | j}|d us$J | j}|d u 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< nN| jr| j|_|jd u r|tkr| js|  d|t
j< n| jsd}| jr`t
j|v rJt|j| jrJ|t
j= t
j|v r|t
j= n(| jrn|jn| jdkr|t
jd |t
jt  |t
j t! t
j"|v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}rT   Fr   r   z
keep-aliveclose)$r>   r?   r9   r`   rz   rJ   rB   valuesoutputaddr   Z
SET_COOKIEr;   r   r:   r    rk   formatrA   Zenable_chunkingZTRANSFER_ENCODING_length_checkr   lengthrj   r   r   rD   
setdefaultr   ZDATEr   ZSERVERr   Z
CONNECTIONr   )rL   r   r   r`   rz   rF   cookier%   r$   r$   r(   r     sh    



zStreamResponse._prepare_headersc                    sj   | j }|d usJ | j}|d us$J |j}d|d  d|d  d| j d| j }||| jI d H  d S )NzHTTP/r   .r    )r>   r?   rz   rS   rV   Zwrite_headersrJ   )rL   r   r   rz   Zstatus_liner$   r$   r(   r     s    (zStreamResponse._write_headersdatarH   c                    sV   t |tttfs J dt| | jr.td| jd u 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())	ro   bytes	bytearray
memoryviewr   r@   rk   r?   writerL   r   r$   r$   r(   r     s    


zStreamResponse.writec                    sD   | j rJ d| jd us J 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)r@   r?   rd   re   rf   drainrP   r$   r$   r(   r   (  s    zStreamResponse.drainr*   c                    sn   t |tttfs J dt| | jr*d S | jd us<J d| j|I d H  d| _d | _| jj	| _
d | _d S )Nr   r   T)ro   r   r   r   r   r@   r?   	write_eofr>   Zoutput_sizerb   r   r$   r$   r(   r   2  s    


zStreamResponse.write_eofc                 C   s\   | j rd}n2| jr:| jd us J | jj d| jj d}nd}d| jj d| j d| dS )Neofr   znot prepared<>)r@   rQ   r>   r   rw   r   r3   rE   )rL   infor$   r$   r(   __repr__B  s    zStreamResponse.__repr__)keyrH   c                 C   s
   | j | S rO   rI   rL   r   r$   r$   r(   __getitem__L  s    zStreamResponse.__getitem__)r   r%   rH   c                 C   s   || j |< d S rO   r   )rL   r   r%   r$   r$   r(   __setitem__O  s    zStreamResponse.__setitem__c                 C   s   | j |= d S rO   r   r   r$   r$   r(   __delitem__R  s    zStreamResponse.__delitem__c                 C   s
   t | jS rO   )lenrI   rP   r$   r$   r(   __len__U  s    zStreamResponse.__len__c                 C   s
   t | jS rO   )iterrI   rP   r$   r$   r(   __iter__X  s    zStreamResponse.__iter__c                 C   s   t t| S rO   )hashidrP   r$   r$   r(   __hash__[  s    zStreamResponse.__hash__)otherrH   c                 C   s   | |u S rO   r$   )rL   r   r$   r$   r(   __eq__^  s    zStreamResponse.__eq__)N)N)r*   )Wr3   r4   r5   r   r   r   r!   __annotations__r   r8   r9   r
   rp   r:   r;   zlibZ_DEFAULT_STRATEGYr<   r[   r=   r+   r>   r?   r   r@   rA   rb   rB   r   r~   r#   r   rM   propertyrQ   rR   rD   rT   rU   rE   rX   rK   r`   ra   rc   rh   rl   rq   rF   rr   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,   M   s  

 

5
A


r,   c                       sF  e Zd ZU dZee ed< 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-   N_compressed_bodyrC   )	bodyrD   rE   textrF   r   r   zlib_executor_sizezlib_executor)
r   rD   rE   r   rF   r   r   r   r   rH   c       	            sX  |d ur|d urt d|d u r(t }
nt|ts<t|}
n|}
|d urXd|v rXt d|d urtj|
v r||sr|rt dnRt|tstdt| |d u rd}|d u rd}|d | |
tj< ||}d }nNtj|
v r|d us|d urt dn*|d ur|d ur|d| 7 }||
tj< t	 j
|||
d	 |d urB|| _n|| _|| _|	| _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=)rD   rE   rG   )r^   r   ro   r   r   r~   	TypeErrorr   encoder   rM   r   r   _zlib_executor_size_zlib_executor)rL   r   rD   rE   r   rF   r   r   r   r   Zreal_headersr   r$   r(   rM   f  sN    









zResponse.__init__rN   c                 C   s   | j S rO   )r8   rP   r$   r$   r(   r     s    zResponse.body)r   rH   c                 C   s   |d u rd | _ nt|ttfr&|| _ nztj| | _ }W n$ tjy`   tdt	| Y n0 | j
}tj|vr~|j|tj< |jr|j D ]\}}||vr|||< qd | _d S )NzUnsupported body type %r)r8   ro   r   r   r   ZPAYLOAD_REGISTRYr]   LookupErrorr^   r   rJ   r   r   r   rF   r   r   )rL   r   rF   r   r%   r$   r$   r(   r     s     

c                 C   s    | j d u rd S | j | jpdS )Nr   )r8   decoder   rP   r$   r$   r(   r     s    
zResponse.text)r   rH   c                 C   sZ   |d u s"t |ts"J dt| | jdkr2d| _| jd u rBd| _|| j| _d | _d S )Nr   r   r   r   )ro   r~   r   r   r   r   r8   r   )rL   r   r$   r$   r(   r     s    



c                 C   sf   | j r
d S tj| jv r&t| jtj S | jd ur:t| jS t| jt	rJd S | jd ur^t| jS dS d S )Nr   )
r:   r   rj   rJ   r[   r   r   ro   r8   r!   rP   r$   r$   r(   r     s    



zResponse.content_lengthr   c                 C   s   t dd S )Nz#Content length is set automatically)rk   r   r$   r$   r(   r     s    r*   r   c                    s   | j r
d S | jd u r| j}n| j}|r4J d|| jd usBJ | jd usPJ |d u 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 )r@   r   r8   r>   r?   rA   r   r   ro   r!   r   r   r   )rL   r   r   r   r$   r(   r     s    
zResponse.write_eofr/   r   c                    s   t j| jv r&t|j| jr| jt j= nv| jst| jt	rZ| jj
d urt| jj
| jt j< nB| jrjt| jnd}|dks| jdkr|jt jvrt|| jt j< t |I d H S )N0i0  )r   rj   rJ   r   r   rD   r:   ro   r8   r!   sizer~   r   ZMETH_HEAD_ALLr   r   )rL   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u r2d S t|j	| j
| jd}| jd usTJ | j
d u 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:   ro   r8   r!   r   r   r+   r2   r   r%   r   r   r   LARGE_BODY_SIZErd   re   compressflushr   rJ   r   r   r~   rj   )rL   r7   Z
compressorr   r$   r(   r     s(    
zResponse._do_start_compression)r*   )r3   r4   r5   r   r
   r   r   r   r[   r~   r#   r   rM   r   r   r!   r   r   r   r   r   r   r   r+   r   r   r$   r$   r   r(   r-   b  sJ   
Cr-   rC   zapplication/json)r   r   rD   rE   rF   r   dumps)	r   r   r   rD   rE   rF   r   r  rH   c                C   s6   | t ur"|s|rtdn|| }t||||||dS )Nz3only one of data, text, or body should be specified)r   r   rD   rE   rF   r   )r   r^   r-   )r   r   r   rD   rE   rF   r   r  r$   r$   r(   r.   1  s    
r.   )Easynciocollections.abccollectionsr   enumjsonr   r   rd   r   concurrent.futuresr   httpr   http.cookiesr   typingr   r   r   r   r	   r
   r   r   Z	multidictr   r   rY   r   r   abcr   Zcompression_utilsr   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>   sp   (0
     Q