U
    ;g(                     @   s   d dl Z d dlmZ d dlmZ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mZ dd	lmZ dd
lmZmZmZ G dd deeeeef  ZdS )    N)suppress)AnyOptionalTuple   )BaseProtocol)ClientOSErrorClientPayloadErrorServerDisconnectedErrorSocketTimeoutError)_EXC_SENTINELBaseTimerContextset_exceptionstatus_code_must_be_empty_body)HttpResponseParserRawResponseMessage)HttpProcessingError)EMPTY_PAYLOAD	DataQueueStreamReaderc                       s  e Zd ZdZejddddZeedddZ	eedd	d
Z
ddddZddddZedddZee dd fddZddddZdd fddZdd fddZefeedd fddZeeddddZdd d d!dd"d#d$d$d%	ee eeeee eeeedd&
d'd(Zddd)d*Zddd+d,Zddd-d.Zeee dd/d0Zej ee dd1d2d0Zddd3d4Z!e"dd5d6d7Z#  Z$S )8ResponseHandlerz8Helper class to adapt between Protocol and StreamReader.N)loopreturnc                 C   s`   t j| |d t| | d| _d | _d| _d | _d | _d| _d| _	d | _
d | _d | _d| _d S )N)r   F       )r   __init__r   _should_close_payload_skip_payload_payload_parserZ_timer_tail	_upgraded_parser_read_timeout_read_timeout_handle_timeout_ceil_threshold)selfr    r'   T/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/client_proto.pyr      s    zResponseHandler.__init__)r   c                 C   s   | j S N)r!   r&   r'   r'   r(   upgraded/   s    zResponseHandler.upgradedc                 C   sJ   | j pH| jd k	r| j  pH| jpH| jd k	pH| jd k	pHt| jpHt| jS r)   )	r   r   is_eofr!   Z
_exceptionr   bool_bufferr    r*   r'   r'   r(   should_close3   s    zResponseHandler.should_closec                 C   s
   d| _ d S NT)r   r*   r'   r'   r(   force_close?   s    zResponseHandler.force_closec                 C   s.   | j }|d k	r*|  d | _ d | _|   d S r)   )	transportcloser   _drop_timeout)r&   r2   r'   r'   r(   r3   B   s    zResponseHandler.closec                 C   s   | j d k	o| j   S r)   )r2   Z
is_closingr*   r'   r'   r(   is_connectedJ   s    zResponseHandler.is_connected)excr   c           	   
      sB  |    |}|}|d k}| jd k	r@tt | j  W 5 Q R X d }| jd k	rz| j }W nZ tk
r } z<| jd k	rd|}|s|d|}t| jt|| W 5 d }~X Y nX | 	 st
|trt|j }|rt|}|rtn|}|d k	st|d k	st| || d| _d | _d | _d | _d| _t | d S )Nz#Response payload is not completed: z. TF)r4   r   r   	ExceptionZfeed_eofr"   r   r   r	   r,   
isinstanceOSErrorr   argsr
   r   AssertionErrorr   Z_reading_pausedsuperconnection_lost)	r&   r6   Zoriginal_connection_errorZreraised_excZconnection_closed_cleanlyZuncompletedunderlying_excZclient_payload_exc_msgZunderlying_non_eof_exc	__class__r'   r(   r=   M   sR    






zResponseHandler.connection_lostc                 C   s   |    d S r)   )r4   r*   r'   r'   r(   eof_received   s    zResponseHandler.eof_receivedc                    s   t    |   d S r)   )r<   pause_readingr4   r*   r?   r'   r(   rB      s    
zResponseHandler.pause_readingc                    s   t    |   d S r)   )r<   resume_reading_reschedule_timeoutr*   r?   r'   r(   rC      s    
zResponseHandler.resume_reading)r6   	exc_causer   c                    s    d| _ |   t || d S r0   )r   r4   r<   r   )r&   r6   rE   r?   r'   r(   r      s    zResponseHandler.set_exception)parserpayloadr   c                 C   s6   || _ || _|   | jr2| jd }| _| | d S )Nr   )r   r   r4   r    data_received)r&   rF   rG   datar'   r'   r(   
set_parser   s    zResponseHandler.set_parserFTi   r   i  )	timerskip_payloadread_until_eofauto_decompressread_timeoutread_bufsizetimeout_ceil_thresholdmax_line_sizemax_field_size)
rK   rL   rM   rN   rO   rP   rQ   rR   rS   r   c       	         C   sV   || _ || _|| _t| | j||t| ||||	d
| _| jrR| jd }
| _| |
 d S )N)rK   Zpayload_exceptionZresponse_with_bodyrM   rN   rR   rS   r   )	r   r#   r%   r   _loopr	   r"   r    rH   )r&   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rI   r'   r'   r(   set_response_params   s$    z#ResponseHandler.set_response_paramsc                 C   s   | j d k	r| j   d | _ d S r)   )r$   cancelr*   r'   r'   r(   r4      s    

zResponseHandler._drop_timeoutc                 C   s<   | j }| jd k	r| j  |r2| j|| j| _nd | _d S r)   )r#   r$   rV   rT   Z
call_later_on_read_timeout)r&   timeoutr'   r'   r(   rD      s    

 z#ResponseHandler._reschedule_timeoutc                 C   s   |    d S r)   )rD   r*   r'   r'   r(   start_timeout   s    zResponseHandler.start_timeoutc                 C   s   | j S r)   r#   r*   r'   r'   r(   rO      s    zResponseHandler.read_timeout)rO   r   c                 C   s
   || _ d S r)   rZ   )r&   rO   r'   r'   r(   rO      s    c                 C   s,   t d}| | | jd k	r(t| j| d S )Nz#Timeout on reading data from socket)r   r   r   )r&   r6   r'   r'   r(   rW      s    

z ResponseHandler._on_read_timeout)rI   r   c           
   
   C   s  |    |sd S | jd k	rL| j|\}}|rHd | _d | _|rH| | d S | js\| jd krn|  j|7  _n2z| j|\}}}W nn tk
r } zP| j	d k	r| j	
  t|trt|j|j|jd}nt }| || W Y d S d }~X Y nX || _d }|D ]T\}	}|	jrd| _|| _| js2t|	jrD| |	tfd n| |	|fd q|d k	r|tk	rz|| j n|   |r|r| | n|| _d S )N)codemessageheadersTr   )rD   r   Z	feed_datar   rH   r!   r"   r    BaseExceptionr2   r3   r8   r   r[   r\   r]   r   r/   r   r   r   r   Zon_eofr4   )
r&   rI   eoftailmessagesr+   r>   r6   rG   r\   r'   r'   r(   rH      s\    







zResponseHandler.data_received)%__name__
__module____qualname____doc__asyncioZAbstractEventLoopr   propertyr-   r+   r/   r1   r3   r5   r   r^   r=   rA   rB   rC   r   r   r   rJ   r   floatintrU   r4   rD   rY   rO   setterrW   bytesrH   __classcell__r'   r'   r?   r(   r      sd   8	$r   )rf   
contextlibr   typingr   r   r   Zbase_protocolr   Zclient_exceptionsr   r	   r
   r   Zhelpersr   r   r   r   httpr   r   Zhttp_exceptionsr   streamsr   r   r   r   r'   r'   r'   r(   <module>   s   