U
    }gT                     @   s  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 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mZ d dlZd dl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) ddl*m+Z+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; dZ<erfddl=m>Z> ee(e/de dge8f Z?ee8gee; f Z@e(dde'i i ddddeAd
ZBG dd deCZDG dd deCZEeE ZFejGdddd G d!d" d"ZHeee(eHf e/f ZIG d#d de"ZJdS )$    N)deque)suppress)escape)
HTTPStatus)Logger)TYPE_CHECKINGAny	AwaitableCallableDequeOptionalSequenceTupleTypeUnioncast   )AbstractAccessLoggerAbstractStreamWriter)BaseProtocol)ceil_timeout)HttpProcessingErrorHttpRequestParserHttpVersion10RawRequestMessageStreamWriter)access_loggerserver_logger)EMPTY_PAYLOADStreamReader)tcp_keepalive)HTTPExceptionHTTPInternalServerError)AccessLogger)BaseRequest)ResponseStreamResponse)RequestHandlerRequestPayloadErrorPayloadAccessError)Serverr'   zasyncio.Task[None]UNKNOWN/TFc                   @   s   e Zd ZdZdS )r(   zPayload parsing error.N__name__
__module____qualname____doc__ r2   r2   T/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/web_protocol.pyr(   N   s   r(   c                   @   s   e Zd ZdZdS )r)   z-Payload was accessed after response was sent.Nr-   r2   r2   r2   r3   r)   R   s   r)   )auto_attribsfrozenslotsc                   @   s&   e Zd ZU eed< eed< eed< dS )_ErrInfostatusexcmessageN)r.   r/   r0   int__annotations__BaseExceptionstrr2   r2   r2   r3   r7   Y   s   
r7   c                       s  e Zd ZdZdZddeeeejdddddd	dd
dde	j
eeeee eeeeeeeeeed fddZedddZeedddZdHee ddddZe	jdd fddZee dd fddZedd d!d"Zddd#d$Zedd%d&d'Z edd(d)d*Z!ddd+d,Z"ddd-d.Z#e$e%edd/d0d1Z&eedd2d3d4Z'eedd2d5d6Z(ddd7d8Z)e$ee*e$ge+e% f e,e%ef d9d:d;Z-ddd<d=Z.e$e%ee,e%ef d>d?d@Z/dIe$eee ee e%dBdCdDZ0e1e*e$ge+e% f dEdFdGZ2  Z3S )Jr'   zHTTP protocol implementation.)_request_count
_keepalive_manager_request_handler_request_factory_tcp_keepalive_next_keepalive_close_time_keepalive_handle_keepalive_timeout_lingering_time	_messages_message_tail_handler_waiter_waiter_task_handler_upgrade_payload_parser_request_parser_reading_pausedloggerdebug
access_logr   _close_force_close_current_request_timeout_ceil_threshold_request_in_progressg     R@TFi  i   g      $@i      )keepalive_timeoutr    rR   access_log_classrT   access_log_formatrS   max_line_sizemax_headersmax_field_sizelingering_timeread_bufsizeauto_decompresstimeout_ceil_thresholdr*   )managerloopr[   r    rR   r\   rT   r]   rS   r^   r_   r`   ra   rb   rc   rd   c             
      s
  t  | d| _d| _d | _|| _|j| _|j| _	|| _
d| _d | _|| _t|| _t | _d| _d | _d | _d | _d| _d | _t| |||
||t|d| _d| _zt|| _W n ttfk
r   Y nX || _|	| _|| _ |r|||| _!nd | _!d| _"d| _#d| _$d S )Nr   Fg            )r^   r`   r_   payload_exceptionrc   rZ   )%super__init__r?   r@   rW   rA   request_handlerrB   request_factoryrC   rD   rE   rF   rG   floatrH   r   rI   rJ   rL   rK   rM   rN   rO   r   r(   rP   rX   	TypeError
ValueErrorrR   rS   rT   r   rU   rV   rY   )selfre   rf   r[   r    rR   r\   rT   r]   rS   r^   r_   r`   ra   rb   rc   rd   	__class__r2   r3   rj      s\    
 zRequestHandler.__init__)returnc                 C   s   d | jj| jd k	rdndS )Nz<{} {}>	connecteddisconnected)formatrr   r.   	transportrp   r2   r2   r3   __repr__   s    zRequestHandler.__repr__c                 C   s   | j S N)rG   rx   r2   r2   r3   r[      s    z RequestHandler.keepalive_timeout      .@N)timeoutrs   c              
      sp  d| _ | jd k	r| j  | jr| j | _z2t|4 I d H  | jI d H  W 5 Q I d H R X W nB tj	tj
fk
r   d | _tjdkrt  }r| r Y nX zft|4 I d H F | jd k	r| jt	  | jd k	r| j st| jI d H  W 5 Q I d H R X W nD tj	tj
fk
rL   tjdkrHt  }rH| rH Y nX | jd k	rd| j  |   d S )NT      )rV   rF   cancelrY   _loopcreate_futurerK   r   asyncioCancelledErrorTimeoutErrorsysversion_infocurrent_task
cancellingrW   _cancelrM   doneshieldforce_close)rp   r|   taskr2   r2   r3   shutdown   sD    

 

&

zRequestHandler.shutdown)rw   rs   c                    s   t  | ttj|}| jr&t| | jd k	s4t| j| | | j	}t
jdkrhtj|  |dd}n||  }|| _d S )Nr~      Trf   eager_start)ri   connection_mader   r   	TransportrD   r    rA   AssertionErrorr   r   r   Taskstartcreate_taskrM   )rp   rw   Zreal_transportrf   r   rq   r2   r3   r     s    
zRequestHandler.connection_made)r9   rs   c                    s   | j d krd S | j | | | j j}|   t | d | _ d | _d | _d | _| jd k	rd| j	  | j
d k	r|d kr~td}| j
| |r| jd k	r| j	  d | _| jd k	r| j  d | _d S )NzConnection lost)rA   connection_losthandler_cancellationr   ri   rC   rB   rP   rF   r   rW   ConnectionResetErrorr   rM   rO   feed_eof)rp   r9   r   rq   r2   r3   r     s,    






zRequestHandler.connection_lost)parserrs   c                 C   s2   | j d kst|| _ | jr.| j | j d| _d S )Nrg   )rO   r   rJ   	feed_data)rp   r   r2   r2   r3   
set_parser2  s
    zRequestHandler.set_parserc                 C   s   d S rz   r2   rx   r2   r2   r3   eof_received;  s    zRequestHandler.eof_received)datars   c           
   
   C   sB  | j s| jrd S | jd kr| js| jd k	s.tz| j|\}}}W n@ tk
r } z"td||j	dt
fg}d}d}W 5 d }~X Y nX |pdD ]&\}}|  jd7  _| j||f q| j}|r|d k	r| s|d  || _|r|r|| _nN| jd kr| jr|r|  j|7  _n$|r>| j|\}	}|	r>|   d S )Ni  )r8   r9   r:   Frg   r2   r   )rV   rU   rO   rN   rP   r   r   r   r7   r:   r   r?   rI   appendrL   r   
set_resultrJ   close)
rp   r   messagesupgradedtailr9   msgpayloadwaitereofr2   r2   r3   data_received>  s4    
zRequestHandler.data_received)valrs   c                 C   s    || _ | jr| j  d | _d S rz   )r@   rF   r   )rp   r   r2   r2   r3   
keep_alive`  s    
zRequestHandler.keep_alivec                 C   s   d| _ | jr| j  d S NT)rU   rL   r   rx   r2   r2   r3   r   f  s    zRequestHandler.closec                 C   s4   d| _ | jr| j  | jd k	r0| j  d | _d S r   )rV   rL   r   rw   r   rx   r2   r2   r3   r   k  s    


zRequestHandler.force_close)requestresponsetimers   c                 C   s(   | j d k	r$| j ||| j |  d S rz   )r   logr   r   )rp   r   r   r   r2   r2   r3   
log_accesss  s    
zRequestHandler.log_access)argskwrs   c                 O   s   | j r| jj || d S rz   )rS   rR   rp   r   r   r2   r2   r3   	log_debugy  s    zRequestHandler.log_debugc                 O   s   | j j|| d S rz   )rR   	exceptionr   r2   r2   r3   log_exception}  s    zRequestHandler.log_exceptionc                 C   sb   d | _ | js| jsd S | j}| }| j}||krF||| j| _ d S | jr^| j	 s^| 
  d S rz   )rF   rV   r@   r   r   rE   call_at_process_keepaliverL   r   r   )rp   rf   now
close_timer2   r2   r3   r     s    z!RequestHandler._process_keepalive)r   
start_timerk   rs   c              
      s  d| _ zpzHz:|| _||I d H }|d krD| d | j|ddd}W 5 d | _X W n tk
r } z |}| |||I d H \}}W 5 d }~X Y n tj	k
r    Y n tj
k
r } z6| jd|d | |d	}| |||I d H \}}W 5 d }~X Y n| tk
rB } z*| |d|}| |||I d H \}}W 5 d }~X Y n4X t|d
dr^tdt | |||I d H \}}W 5 d| _ | jd k	r| jd  X ||fS )NTFz9Request handler returned None instead of a valid response  zHandler returned None)r:   zRequest handler timed out.exc_infoi  __http_exception__zlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception instead)rY   rK   r   rW   r   handle_errorr!   finish_responser   r   r   r   	ExceptiongetattrwarningswarnDeprecationWarning)rp   r   r   rk   respr9   resetr2   r2   r3   _handle_request  sB    ((*zRequestHandler._handle_requestc                    s  | j }t|}|d k	st| j}|d k	s.t| j}d }| jd k	sFt| jd k	sTt| js| j	sz| | _
| j
I d H  W 5 d | _
X | j	 \}}| }| jd7  _t| |}	t|tr| |}
t}n| j}
| ||| |	|}d zz| |||
}tjdkrtj||dd}n
| |}z|I d H \}}W n0 t!k
rh   | d Y W W  qY nX ~|r| d W W | qt"|j#| _|$ s| j%}| jsn|rn| d| | }|| }zX|$ s&||k r&t&|| 4 I d H  |' I d H  W 5 Q I d H R X | }qW nD tj(tj)fk
rl   tjd	krht  }rh|* rh Y nX |$ s| js| d
 | +  |,t- W n\ tj(k
r   | d  Y n: t.k
r } z| j/d|d | 0  W 5 d }~X Y nX W 5 | jd kr"|d k	r"| d n^| js| jrx| jsx|d k	r| }|| }|| _| jd kr||| j| _n  qX  qT| jsd | _1| jd k	r| j+  d S )Nr   z'Ignored premature client disconnection.r   Tr   z&Ignored premature client disconnectionz(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.r}   zUncompleted request.zUnhandled exceptionr   )2r   r   r   r   rA   rG   rC   rB   rV   rI   rL   r   popleftr   Zrequests_countr   
isinstancer7   _make_error_handlerERRORrw   r   r@   rU   rE   rF   r   r   r   r   r   r   r   ConnectionErrorboolr   is_eofrH   r   readanyr   r   r   r   set_exception_PAYLOAD_ACCESS_ERRORr   r   r   rM   )rp   rf   handlerre   r[   r   r:   r   r   writerrk   r   r   r   coror   r   ra   Zend_ttr9   r2   r2   r3   r     s    









 



 zRequestHandler.start)r   r   r   rs   c              	      s(  |   | jd k	r>| jd d| _| jr>| j| j d| _z
|j}W nz tk
r   |d kr| d| t	 }t
|j|j|j|jd}n,| d|| t	 }t
|j|j|j|jd}|j}Y nX z ||I d H  | I d H  W n, tk
r   | ||| |df Y S X | ||| |dfS )NFrg   z;Missing return statement on request handler for request: %s)r8   reasontextheaderszEWeb-handler should return a response instance, got %r for request: %sT)_finishrP   set_upgradedrN   rJ   r   prepareAttributeErrorr   r"   r%   r8   r   r   r   	write_eofr   r   )rp   r   r   r   Zprepare_methr9   r2   r2   r3   r   (  sV    

      zRequestHandler.finish_responser   )r   r8   r9   r:   rs   c           
   	   C   s   | j d||d |jjdkr$tdd}|tjkrdtj}tjj}d }| jrlt	t
 t }W 5 Q R X d|jdd	kr|rt|}d
| d}dj||d}d}n|r|}|d | }t|||d}	|	  |	S )NzError handling request: %sr   r   zMResponse is sent already, cannot send another response with the error messagez
text/plainz{0.value} {0.phrase}z	text/htmlAccept z<h2>Traceback:</h2>
<pre>z</pre>zV<html><head><title>{title}</title></head><body>
<h1>{title}</h1>
{msg}
</body></html>
)titler   z

)r8   r   content_type)r   r   output_sizer   r   INTERNAL_SERVER_ERRORrv   descriptionrS   r   r   	traceback
format_excr   gethtml_escaper%   r   )
rp   r   r8   r9   r:   ctr   r   tbr   r2   r2   r3   r   S  s:    

 zRequestHandler.handle_error)err_infors   c                    s   t td fdd}|S )N)r   rs   c                    s    |  j j jS rz   )r   r8   r9   r:   )r   r   rp   r2   r3   r     s       z3RequestHandler._make_error_handler.<locals>.handler)r$   r&   )rp   r   r   r2   r   r3   r     s    z"RequestHandler._make_error_handler)r{   )r   NN)4r.   r/   r0   r1   	__slots__r   r#   r   
LOG_FORMATr   AbstractEventLooprm   r   r   r   r   r>   r;   rj   ry   propertyr[   r   r   BaseTransportr   r=   r   r   r   r   bytesr   r   r   r   r$   r&   r   r   r   r   r
   r	   r   r   r   r   r   r7   r   __classcell__r2   r2   rq   r3   r'   c   s   $K(	"	  
.l  
.   .)Kr   Zasyncio.streamsr   r   r   collectionsr   
contextlibr   htmlr   r   httpr   loggingr   typingr   r   r	   r
   r   r   r   r   r   r   r   attryarlabcr   r   base_protocolr   helpersr   r   r   r   r   r   r   r   r   streamsr   r   tcp_helpersr    web_exceptionsr!   r"   web_logr#   web_requestr$   web_responser%   r&   __all__
web_serverr*   Z_RequestFactoryZ_RequestHandlerURLr   r   r(   r)   r   sr7   Z_MsgTyper'   r2   r2   r2   r3   <module>   sp   4