
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`                     @   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 ddlmZ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ServerTimeoutError)BaseTimerContext)HttpResponseParserRawResponseMessage)EMPTY_PAYLOAD	DataQueueStreamReaderc                	       sP  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dd fddZeeddddZdddd dd!d"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dd,d-d.Z  Z S )/ResponseHandlerz8Helper class to adapt between Protocol and StreamReader.N)loopreturnc                 C   sZ   t j| |d t| | 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)selfr    r!   G/opt/alt/python38/lib64/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   sV   | j d k	r| j  r| jrdS | jpT| jpT|  d k	pT| jd k	pTt| dkpTt| jS )NTr   )	r   is_eofr   r   Z	exceptionr   lenboolr   r$   r!   r!   r"   should_close+   s    

zResponseHandler.should_closec                 C   s
   d| _ d S NT)r   r$   r!   r!   r"   force_close9   s    zResponseHandler.force_closec                 C   s.   | j }|d k	r*|  d | _ d | _|   d S r#   )	transportcloser   _drop_timeout)r    r,   r!   r!   r"   r-   <   s    zResponseHandler.closec                 C   s   | j d k	o| j   S r#   )r,   Z
is_closingr$   r!   r!   r"   is_connectedD   s    zResponseHandler.is_connected)excr   c              	      s   |    | jd k	r0tt | j  W 5 Q R X d }| jd k	r|z| j }W n. tk
rz   | jd k	rv| jtd Y nX | 	 st
|trt|j }|d krt|}| | d| _d | _d | _d | _d| _t | d S )Nz!Response payload is not completedTF)r.   r   r   	ExceptionZfeed_eofr   r   set_exceptionr	   r&   
isinstanceOSErrorr   argsr
   r   Z_reading_pausedsuperconnection_lost)r    r0   Zuncompleted	__class__r!   r"   r7   G   s2    







zResponseHandler.connection_lostc                 C   s   |    d S r#   )r.   r$   r!   r!   r"   eof_receivedi   s    zResponseHandler.eof_receivedc                    s   t    |   d S r#   )r6   pause_readingr.   r$   r8   r!   r"   r;   m   s    
zResponseHandler.pause_readingc                    s   t    |   d S r#   )r6   resume_reading_reschedule_timeoutr$   r8   r!   r"   r<   q   s    
zResponseHandler.resume_readingc                    s   d| _ |   t | d S r*   )r   r.   r6   r2   r    r0   r8   r!   r"   r2   u   s    zResponseHandler.set_exception)parserpayloadr   c                 C   s6   || _ || _|   | jr2| jd }| _| | d S )Nr   )r   r   r.   r   data_received)r    r?   r@   datar!   r!   r"   
set_parserz   s    zResponseHandler.set_parserFTi   )timerskip_payloadread_until_eofauto_decompressread_timeoutread_bufsize)rD   rE   rF   rG   rH   rI   r   c             
   C   sT   || _ || _|   t| | j||t| ||d| _| jrP| jd }| _| | d S )N)rD   Zpayload_exceptionZresponse_with_bodyrF   rG   r   )	r   r   r=   r   _loopr	   r   r   rA   )r    rD   rE   rF   rG   rH   rI   rB   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"   r.      s    

zResponseHandler._drop_timeoutc                 C   s<   | j }| jd k	r| j  |r2| j|| j| _nd | _d S r#   )r   r   rL   rJ   Z
call_later_on_read_timeout)r    timeoutr!   r!   r"   r=      s    

 z#ResponseHandler._reschedule_timeoutc                 C   s,   t d}| | | jd k	r(| j| d S )Nz#Timeout on reading data from socket)r   r2   r   r>   r!   r!   r"   rM      s    

z ResponseHandler._on_read_timeout)rB   r   c           	   
   C   sx  |    |sd S | jd k	rL| j|\}}|rHd | _d | _|rH| | d S | js\| jd krn|  j|7  _nz| j|\}}}W nF tk
r } z(| j	d k	r| j	
  | | W Y d S d }~X Y nX || _d }|D ]P\}}|jrd| _|| _| js|jdkr| |tfd q| ||fd q|d k	rV|tk	rN|| j n|   |rt|rn| | n|| _d S )NT)   i0  r   )r=   r   Z	feed_datar   rA   r   r   r   BaseExceptionr,   r-   r2   r)   r   r   coder   Zon_eofr.   )	r    rB   eoftailZmessagesr%   r0   r@   messager!   r!   r"   rA      sJ    






zResponseHandler.data_received)!__name__
__module____qualname____doc__asyncioZAbstractEventLoopr   propertyr(   r%   r)   r+   r-   r/   r   rP   r7   r:   r;   r<   r2   r   rC   r   floatintrK   r.   r=   rM   bytesrA   __classcell__r!   r!   r8   r"   r      sD   "r   )rY   
contextlibr   typingr   r   r   Zbase_protocolr   Zclient_exceptionsr   r	   r
   r   Zhelpersr   Zhttpr   r   Zstreamsr   r   r   r   r!   r!   r!   r"   <module>   s   