U
    ;gS                     @   s$  U d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZ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 dZedZG d	d
 d
eZG dd dee ZG dd dZG dd dZG dd deZG dd deZe Z ee e!d< G dd dee Z"G dd de"e Z#dS )    N)		AwaitableCallableDequeFinalGenericListOptionalTupleTypeVar   )BaseProtocol)_EXC_SENTINELBaseTimerContext	TimerNoopset_exception
set_result)internal_logger)EMPTY_PAYLOAD	EofStreamStreamReader	DataQueueFlowControlDataQueue_Tc                   @   s   e Zd ZdZdS )r   zeof stream indication.N)__name__
__module____qualname____doc__ r   r   O/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/streams.pyr   %   s   r   c                   @   sD   e Zd Zeg ee f ddddZddddZedd	d
ZdS )AsyncStreamIteratorN)	read_funcreturnc                 C   s
   || _ d S N)r    )selfr    r   r   r   __init__*   s    zAsyncStreamIterator.__init__zAsyncStreamIterator[_T]r!   c                 C   s   | S r"   r   r#   r   r   r   	__aiter__-   s    zAsyncStreamIterator.__aiter__c                    s<   z|   I d H }W n tk
r*   tY nX |dkr8t|S N    )r    r   StopAsyncIterationr#   rvr   r   r   	__anext__0   s    
zAsyncStreamIterator.__anext__)	r   r   r   r   r   r   r$   r'   r-   r   r   r   r   r   )   s   r   c                   @   s@   e Zd ZdddddZd dddZeeef dd	d
ZdS )ChunkTupleAsyncStreamIteratorr   N)streamr!   c                 C   s
   || _ d S r"   )_stream)r#   r/   r   r   r   r$   ;   s    z&ChunkTupleAsyncStreamIterator.__init__r%   c                 C   s   | S r"   r   r&   r   r   r   r'   >   s    z'ChunkTupleAsyncStreamIterator.__aiter__c                    s    | j  I d H }|dkrt|S )Nr)   F)r0   	readchunkr*   r+   r   r   r   r-   A   s    z'ChunkTupleAsyncStreamIterator.__anext__)	r   r   r   r$   r'   r	   bytesboolr-   r   r   r   r   r.   :   s   r.   c                   @   sR   e Zd Zee dddZeee dddZee dddZe	dd	d
Z
dS )AsyncStreamReaderMixinr%   c                 C   s
   t | jS r"   )r   readliner&   r   r   r   r'   I   s    z AsyncStreamReaderMixin.__aiter__nr!   c                    s   t  fddS )z>Returns an asynchronous iterator that yields chunks of size n.c                      s
     S r"   )readr   r8   r#   r   r   <lambda>N   r)   z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>)r   r#   r8   r   r:   r   iter_chunkedL   s    z#AsyncStreamReaderMixin.iter_chunkedc                 C   s
   t | jS )z3Yield all available data as soon as it is received.)r   readanyr&   r   r   r   iter_anyP   s    zAsyncStreamReaderMixin.iter_anyc                 C   s   t | S )zYield chunks of data as they are received by the server.

        The yielded objects are tuples
        of (bytes, bool) as returned by the StreamReader.readchunk method.
        )r.   r&   r   r   r   iter_chunksT   s    z"AsyncStreamReaderMixin.iter_chunksN)r   r   r   r   r3   r'   intr=   r?   r.   r@   r   r   r   r   r5   H   s   r5   c                   @   s  e Zd ZdZdZdddeeee ee	j
 ddddZedd	d
Zeeef dddZee dddZefeeddddZeg df ddddZddddZedddZedddZddddZeddddZd@eedd d!d"Zddd#d$Zddd%d&Zedd'd(d)Z edd*d+Z!dAeed-d.d/Z"dBeed1d2d3Z#edd4d5Z$eeef dd6d7Z%eed1d8d9Z&dCeed1d:d;Z'eed1d<d=Z(eed1d>d?Z)dS )Dr   a*  An enhancement of asyncio.StreamReader.

    Supports asynchronous iteration by line, chunk or as available::

        async for line in reader:
            ...
        async for chunk in reader.iter_chunked(1024):
            ...
        async for slice in reader.iter_any():
            ...

    r   N)timerloop)protocollimitrB   rC   r!   c                C   s   || _ || _|d | _|d kr&t }|| _d| _d| _d | _t	
 | _d| _d| _d | _d | _d | _|d krtt n|| _g | _d S )N   r   F)	_protocol
_low_water_high_waterasyncioZget_event_loop_loop_size_cursor_http_chunk_splitscollectionsdeque_buffer_buffer_offset_eof_waiter_eof_waiter
_exceptionr   _timer_eof_callbacks)r#   rD   rE   rB   rC   r   r   r   r$   m   s"    

zStreamReader.__init__r%   c                 C   s   | j jg}| jr |d| j  | jr0|d | jdkrP|d| j| jf  | jrf|d| j  | jr||d| j  dd	| S )	Nz%d byteseofi   zlow=%d high=%dzw=%rze=%r<%s> )
	__class__r   rL   appendrS   rH   rI   rT   rV   join)r#   infor   r   r   __repr__   s    


zStreamReader.__repr__c                 C   s   | j | jfS r"   )rH   rI   r&   r   r   r   get_read_buffer_limits   s    z#StreamReader.get_read_buffer_limitsc                 C   s   | j S r"   rV   r&   r   r   r   	exception   s    zStreamReader.exceptionexc	exc_causer!   c                 C   sT   || _ | j  | j}|d k	r0d | _t||| | j}|d k	rPd | _t||| d S r"   )rV   rX   clearrT   r   rU   r#   re   rf   waiterr   r   r   r      s    
zStreamReader.set_exceptioncallbackr!   c                 C   sB   | j r2z
|  W q> tk
r.   td Y q>X n| j| d S NException in eof callback)rS   	Exceptionr   rc   rX   r]   r#   rk   r   r   r   on_eof   s    
zStreamReader.on_eofc              	   C   s   d| _ | j}|d k	r$d | _t|d  | j}|d k	rBd | _t|d  | jD ].}z
|  W qH tk
rt   td Y qHX qH| j  d S )NTrm   )	rS   rT   r   rU   rX   rn   r   rc   rg   )r#   ri   cbr   r   r   feed_eof   s    



zStreamReader.feed_eofc                 C   s   | j S )z&Return True if  'feed_eof' was called.rS   r&   r   r   r   is_eof   s    zStreamReader.is_eofc                 C   s   | j o| j S )z=Return True if the buffer is empty and 'feed_eof' was called.rS   rQ   r&   r   r   r   at_eof   s    zStreamReader.at_eofc                    sB   | j r
d S | jd kst| j | _z| jI d H  W 5 d | _X d S r"   )rS   rU   AssertionErrorrK   create_futurer&   r   r   r   wait_eof   s    zStreamReader.wait_eof)datar!   c                 C   sx   t jdtdd |sdS | jr>| jd | jd | jd< d| _|  jt|7  _|  jt|8  _| j| d| _	dS )zDrollback reading some data from stream, inserting it to buffer head.zJunread_data() is deprecated and will be removed in future releases (#3260)rF   )
stacklevelNr   )
warningswarnDeprecationWarningrR   rQ   rL   lenrM   
appendleft_eof_counter)r#   rz   r   r   r   unread_data   s    zStreamReader.unread_datarz   sizer!   c                 C   s   | j rtd|sd S t|}|  j|7  _| j| |  j|7  _| j}|d k	rdd | _t|d  | j| j	kr| j
js| j
  d S )Nzfeed_data after feed_eof)rS   rw   r   rL   rQ   r]   total_bytesrT   r   rI   rG   _reading_pausedpause_reading)r#   rz   r   Zdata_lenri   r   r   r   	feed_data   s    
zStreamReader.feed_datac                 C   s"   | j d kr| jrtdg | _ d S )Nz?Called begin_http_chunk_receiving whensome data was already fed)rN   r   RuntimeErrorr&   r   r   r   begin_http_chunk_receiving  s    
z'StreamReader.begin_http_chunk_receivingc                 C   sd   | j d krtd| j r"| j d nd}| j|kr4d S | j | j | j}|d k	r`d | _t|d  d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )rN   r   r   r]   rT   r   )r#   posri   r   r   r   end_http_chunk_receiving  s    


z%StreamReader.end_http_chunk_receiving)	func_namer!   c              	      sd   | j jstd| jd k	r&td| | j  }| _z | j |I d H  W 5 Q R X W 5 d | _X d S )NzConnection closed.zH%s() called while another coroutine is already waiting for incoming data)rG   	connectedr   rT   rK   rx   rW   )r#   r   ri   r   r   r   _wait+  s    
zStreamReader._waitc                    s   |   I d H S r"   )	readuntilr&   r   r   r   r6   @  s    zStreamReader.readline   
)	separatorr!   c           	         s   t |}|dkrtd| jd k	r(| jd}d}d}|r| jr|r| j}| jd ||d }| |rv|| | d nd}||7 }|t |7 }|rd}|| jkr8tdq8| jrq|r4| 	d	I d H  q4|S )
Nr   z,Separator should be at least one-byte stringr)   Tr   r   FzChunk too bigr   )
r   
ValueErrorrV   rQ   rR   find_read_nowait_chunkrI   rS   r   )	r#   r   Zseplenchunk
chunk_sizeZ
not_enoughoffsetZicharrz   r   r   r   r   C  s4    



zStreamReader.readuntilr   r7   c                    s   | j d k	r| j | jrF| jsFt| ddd | _| jdkrFtjddd |sNdS |dk rg }|  I d H }|snqz|| qZd	|S | js| js| 
d	I d H  q| |S )
Nr   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.T)
stack_infor)   r9   )rV   rS   rQ   getattrr   r   warningr>   r]   r^   r   _read_nowait)r#   r8   blocksblockr   r   r   r9   g  s*    


zStreamReader.readc                    s8   | j d k	r| j | js.| js.| dI d H  q| dS )Nr>   r   )rV   rQ   rS   r   r   r&   r   r   r   r>     s
    
zStreamReader.readanyc                    s   | j dk	r| j | jrZ| jd}|| jkr0dS || jkrN| || j dfS td q| jrn| ddfS | j	rxdS | 
d	I dH  q dS )
a  Returns a tuple of (data, end_of_http_chunk).

        When chunked transfer
        encoding is used, end_of_http_chunk is a boolean indicating if the end
        of the data corresponds to the end of a HTTP chunk , otherwise it is
        always False.
        Nr   r)   TTzESkipping HTTP chunk end due to data consumption beyond chunk boundaryr   Fr1   r2   )rV   rN   poprM   r   r   r   rQ   r   rS   r   )r#   r   r   r   r   r2     s     	


zStreamReader.readchunkc                    sp   | j d k	r| j g }|dkrf| |I d H }|sNd|}t|t|| || |t|8 }qd|S )Nr   r)   )rV   r9   r^   rJ   IncompleteReadErrorr   r]   )r#   r8   r   r   partialr   r   r   readexactly  s    


zStreamReader.readexactlyc                 C   s2   | j d k	r| j | jr(| j s(td| |S )Nz9Called while some coroutine is waiting for incoming data.)rV   rT   doner   r   r<   r   r   r   read_nowait  s    
zStreamReader.read_nowaitc                 C   s   | j d }| j}|dkrHt|| |krH||||  }|  j|7  _n,|rj| j   ||d  }d| _n
| j  }|  jt|8  _|  jt|7  _| j}|r|d | jk r|d q| j| jk r| j	j
r| j	  |S )Nr   r   )rQ   rR   r   popleftrL   rM   rN   r   rH   rG   r   resume_reading)r#   r8   Zfirst_bufferr   rz   Zchunk_splitsr   r   r   r     s$    



zStreamReader._read_nowait_chunkc                 C   sZ   | j   g }| jrH| |}|| |dkr|t|8 }|dkrqHq|rVd|S dS )z6Read not more than n bytes, or whole buffer if n == -1r   r   r)   )rW   Zassert_timeoutrQ   r   r]   r   r^   )r#   r8   chunksr   r   r   r   r     s    


zStreamReader._read_nowait)r   )r   )r   )r   )*r   r   r   r   r   r   rA   r   r   rJ   AbstractEventLoopr$   strr`   r	   ra   BaseExceptionrc   r   r   r   rp   rr   r4   rt   rv   ry   r3   r   r   r   r   r   r6   r   r9   r>   r2   r   r   r   r   r   r   r   r   r   ]   sN   	$*"r   c                   @   s  e Zd ZddddZedddZee dddZe	feedd	d
dZ
eg df ddddZddddZedddZedddZddddZd)eeddddZedddZd*eeddd Zedd!d"Zeeef dd#d$Zeedd%d&Zd+eedd'd(ZdS ),EmptyStreamReaderNr%   c                 C   s
   d| _ d S )NFZ_read_eof_chunkr&   r   r   r   r$   	  s    zEmptyStreamReader.__init__c                 C   s   d| j j S )NrZ   )r\   r   r&   r   r   r   r`     s    zEmptyStreamReader.__repr__c                 C   s   d S r"   r   r&   r   r   r   rc     s    zEmptyStreamReader.exceptionrd   c                 C   s   d S r"   r   )r#   re   rf   r   r   r   r     s    zEmptyStreamReader.set_exceptionrj   c                 C   s.   z
|  W n t k
r(   td Y nX d S rl   )rn   r   rc   ro   r   r   r   rp     s    
zEmptyStreamReader.on_eofc                 C   s   d S r"   r   r&   r   r   r   rr     s    zEmptyStreamReader.feed_eofc                 C   s   dS NTr   r&   r   r   r   rt   "  s    zEmptyStreamReader.is_eofc                 C   s   dS r   r   r&   r   r   r   rv   %  s    zEmptyStreamReader.at_eofc                    s   d S r"   r   r&   r   r   r   ry   (  s    zEmptyStreamReader.wait_eofr   )rz   r8   r!   c                 C   s   d S r"   r   )r#   rz   r8   r   r   r   r   +  s    zEmptyStreamReader.feed_datac                    s   dS r(   r   r&   r   r   r   r6   .  s    zEmptyStreamReader.readliner   r7   c                    s   dS r(   r   r<   r   r   r   r9   1  s    zEmptyStreamReader.readc                    s   dS r(   r   r&   r   r   r   r>   6  s    zEmptyStreamReader.readanyc                    s   | j sd| _ dS dS )NTr1   r   r   r&   r   r   r   r2   9  s    zEmptyStreamReader.readchunkc                    s   t d|d S r(   )rJ   r   r<   r   r   r   r   @  s    zEmptyStreamReader.readexactlyc                 C   s   dS r(   r   r<   r   r   r   r   C  s    zEmptyStreamReader.read_nowait)r   )r   )r   )r   r   r   r$   r   r`   r   r   rc   r   r   r   rp   rr   r4   rt   rv   ry   r3   rA   r   r6   r9   r>   r	   r2   r   r   r   r   r   r   r     s*   r   r   c                   @   s   e Zd ZdZejddddZedddZe	dd	d
Z
e	dddZee dddZefeeddddZdeeddddZddddZedddZee dddZdS )r   z>DataQueue is a general-purpose blocking queue with one reader.N)rC   r!   c                 C   s,   || _ d| _d | _d | _d| _t | _d S )NFr   )rK   rS   rT   rV   rL   rO   rP   rQ   )r#   rC   r   r   r   r$   M  s    zDataQueue.__init__r%   c                 C   s
   t | jS r"   )r   rQ   r&   r   r   r   __len__U  s    zDataQueue.__len__c                 C   s   | j S r"   rs   r&   r   r   r   rt   X  s    zDataQueue.is_eofc                 C   s   | j o| j S r"   ru   r&   r   r   r   rv   [  s    zDataQueue.at_eofc                 C   s   | j S r"   rb   r&   r   r   r   rc   ^  s    zDataQueue.exceptionrd   c                 C   s0   d| _ || _| j}|d k	r,d | _t||| d S r   )rS   rV   rT   r   rh   r   r   r   r   a  s    zDataQueue.set_exceptionr   r   c                 C   s@   |  j |7  _ | j||f | j}|d k	r<d | _t|d  d S r"   )rL   rQ   r]   rT   r   )r#   rz   r   ri   r   r   r   r   n  s    zDataQueue.feed_datac                 C   s(   d| _ | j}|d k	r$d | _t|d  d S r   )rS   rT   r   )r#   ri   r   r   r   rr   w  s
    zDataQueue.feed_eofc              	      s   | j sX| jsX| jrt| j | _z| jI d H  W n$ tjtjfk
rV   d | _ Y nX | j r~| j 	 \}}|  j
|8  _
|S | jd k	r| jntd S r"   )rQ   rS   rT   rw   rK   rx   rJ   ZCancelledErrorTimeoutErrorr   rL   rV   r   r#   rz   r   r   r   r   r9     s    

zDataQueue.readc                 C   s
   t | jS r"   )r   r9   r&   r   r   r   r'     s    zDataQueue.__aiter__)r   )r   r   r   r   rJ   r   r$   rA   r   r4   rt   rv   r   r   rc   r   r   r   r   rr   r9   r   r'   r   r   r   r   r   J  s    	r   c                       sX   e Zd ZdZeeejdd fddZde	edd fdd	Z
e	d
 fddZ  ZS )r   zlFlowControlDataQueue resumes and pauses an underlying stream.

    It is a destination for parsed data.
    N)rD   rE   rC   r!   c                   s"   t  j|d || _|d | _d S )N)rC   rF   )superr$   rG   _limit)r#   rD   rE   rC   r\   r   r   r$     s    zFlowControlDataQueue.__init__r   r   c                    s0   t  || | j| jkr,| jjs,| j  d S r"   )r   r   rL   r   rG   r   r   r   r   r   r   r     s    zFlowControlDataQueue.feed_datar%   c                    s:   zt  I d H W S | j | jk r4| jjr4| j  X d S r"   )rL   r   rG   r   r   r   r9   r&   r   r   r   r9     s    zFlowControlDataQueue.read)r   )r   r   r   r   r   rA   rJ   r   r$   r   r   r9   __classcell__r   r   r   r   r     s     r   )$rJ   rO   r|   typingr   r   r   r   r   r   r   r	   r
   Zbase_protocolr   Zhelpersr   r   r   r   r   logr   __all__r   rn   r   r   r.   r5   r   r   r   __annotations__r   r   r   r   r   r   <module>   s*    ,   .?M