a
    &hdQ                     @   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 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)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   T/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/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y(   tY n0 |dkr6t|S N    )r   r   StopAsyncIterationr"   rvr   r   r   	__anext__*   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#   5   s    z&ChunkTupleAsyncStreamIterator.__init__r$   c                 C   s   | S r!   r   r%   r   r   r   r&   8   s    z'ChunkTupleAsyncStreamIterator.__aiter__c                    s    | j  I d H }|dkrt|S )Nr(   F)r/   	readchunkr)   r*   r   r   r   r,   ;   s    z'ChunkTupleAsyncStreamIterator.__anext__)	r   r   r   r#   r&   r	   bytesboolr,   r   r   r   r   r-   4   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&   C   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   r7   r"   r   r   <lambda>H   r(   z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>)r   r"   r7   r   r9   r   iter_chunkedF   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_anyJ   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_chunksN   s    z"AsyncStreamReaderMixin.iter_chunksN)r   r   r   r   r2   r&   intr<   r>   r-   r?   r   r   r   r   r4   B   s   r4   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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limitrA   rB   r    c                C   s   || _ || _|d | _|d u r&t }|| _d| _d| _d | _t	
 | _d| _d| _d | _d | _d | _|d u rtt n|| _g | _d S )N   r   F)	_protocol
_low_water_high_waterasyncioget_event_loop_loop_size_cursor_http_chunk_splitscollectionsdeque_buffer_buffer_offset_eof_waiter_eof_waiter
_exceptionr   _timer_eof_callbacks)r"   rC   rD   rA   rB   r   r   r   r#   g   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   rG   rH   rT   rV   join)r"   infor   r   r   __repr__   s    


zStreamReader.__repr__c                 C   s   | j | jfS r!   )rG   rH   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excr    c                 C   sP   || _ | j  | j}|d ur.d | _t|| | j}|d urLd | _t|| d S r!   )rV   rX   clearrT   r   rU   r"   re   waiterr   r   r   r      s    

zStreamReader.set_exceptioncallbackr    c                 C   s@   | j r0z
|  W q< ty,   td Y q<0 n| j| d S NException in eof callback)rS   	Exceptionr   rc   rX   r]   r"   rj   r   r   r   on_eof   s    
zStreamReader.on_eofc              	   C   s   d| _ | j}|d ur$d | _t|d  | j}|d urBd | _t|d  | jD ],}z
|  W qH tyr   td Y qH0 qH| j  d S )NTrl   )	rS   rT   r   rU   rX   rm   r   rc   rf   )r"   rh   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                    sH   | j r
d S | jd u sJ | j | _z| jI d H  W d | _nd | _0 d S r!   )rS   rU   rK   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)rE   )
stacklevelNr   )
warningswarnDeprecationWarningrR   rQ   rL   lenrM   
appendleft_eof_counter)r"   rx   r   r   r   unread_data   s    zStreamReader.unread_datarx   sizer    c                 C   s   | j rJ d|sd S |  jt|7  _| j| |  jt|7  _| j}|d urdd | _t|d  | j| jkr| j	j
s| j	  d S )Nzfeed_data after feed_eof)rS   rL   r}   rQ   r]   total_bytesrT   r   rH   rF   _reading_pausedpause_readingr"   rx   r   rh   r   r   r   	feed_data   s    
zStreamReader.feed_datac                 C   s"   | j d u 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 u rtd| j r"| j d nd}| j|kr4d S | j | j | j}|d ur`d | _t|d  d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )rN   r   r   r]   rT   r   )r"   posrh   r   r   r   end_http_chunk_receiving  s    


z%StreamReader.end_http_chunk_receiving)	func_namer    c                    sn   | j d urtd| | j  }| _ z:| j |I d H  W d    n1 sN0    Y  W d | _ nd | _ 0 d S )NzH%s() called while another coroutine is already waiting for incoming data)rT   r   rK   rv   rW   )r"   r   rh   r   r   r   _wait   s    
*zStreamReader._waitc                    s   |   I d H S r!   )	readuntilr%   r   r   r   r5   2  s    zStreamReader.readline   
)	separatorr    c           	         s   t |}|dkrtd| jd u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_chunkrH   rS   r   )	r"   r   seplenchunkZ
chunk_sizeZ
not_enoughoffsetZicharrx   r   r   r   r   5  s4    



zStreamReader.readuntilr   r6   c                    s   | j d u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(   r8   )rV   rS   rQ   getattrr   r   warningr=   r]   r^   r   _read_nowait)r"   r7   blocksblockr   r   r   r8   Y  s*    


zStreamReader.readc                    s8   | j d u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u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   Fr0   r1   )rV   rN   poprM   r   r   r   rQ   r   rS   r   )r"   r   r   r   r   r1     s     	


zStreamReader.readchunkc                    sp   | j d ur| j g }|dkrf| |I d H }|sNd|}t|t|| || |t|8 }qd|S )Nr   r(   )rV   r8   r^   rI   IncompleteReadErrorr}   r]   )r"   r7   r   r   partialr   r   r   readexactly  s    


zStreamReader.readexactlyc                 C   s2   | j d u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   rG   rF   r   resume_reading)r"   r7   Zfirst_bufferr   rx   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   assert_timeoutrQ   r   r]   r}   r^   )r"   r7   chunksr   r   r   r   r     s    


zStreamReader._read_nowait)r   )r   )r   )r   ))r   r   r   r   r   r   r@   r   r   rI   AbstractEventLoopr#   strr`   r	   ra   BaseExceptionrc   r   r   ro   rq   r3   rs   ru   rw   r2   r   r   r   r   r   r5   r   r8   r=   r1   r   r   r   r   r   r   r   r   r   W   sD   	$*"r   c                   @   s  e Zd ZddddZedddZee dddZ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   r   r   r   r     s    zEmptyStreamReader.set_exceptionri   c                 C   s,   z
|  W n t y&   td Y n0 d S rk   )rm   r   rc   rn   r   r   r   ro     s    
zEmptyStreamReader.on_eofc                 C   s   d S r!   r   r%   r   r   r   rq     s    zEmptyStreamReader.feed_eofc                 C   s   dS NTr   r%   r   r   r   rs     s    zEmptyStreamReader.is_eofc                 C   s   dS r   r   r%   r   r   r   ru     s    zEmptyStreamReader.at_eofc                    s   d S r!   r   r%   r   r   r   rw     s    zEmptyStreamReader.wait_eofr   )rx   r7   r    c                 C   s   d S r!   r   )r"   rx   r7   r   r   r   r     s    zEmptyStreamReader.feed_datac                    s   dS r'   r   r%   r   r   r   r5     s    zEmptyStreamReader.readliner   r6   c                    s   dS r'   r   r;   r   r   r   r8     s    zEmptyStreamReader.readc                    s   dS r'   r   r%   r   r   r   r=   $  s    zEmptyStreamReader.readanyc                    s   | j sd| _ dS dS )NTr0   r   r   r%   r   r   r   r1   '  s    zEmptyStreamReader.readchunkc                    s   t d|d S r'   )rI   r   r;   r   r   r   r   .  s    zEmptyStreamReader.readexactlyc                 C   s   dS r'   r   r;   r   r   r   r   1  s    zEmptyStreamReader.read_nowait)r   )r   )r   )r   r   r   r#   r   r`   r   r   rc   r   r   ro   rq   r3   rs   ru   rw   r2   r@   r   r5   r8   r=   r	   r1   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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)rB   r    c                 C   s,   || _ d| _d | _d | _d| _t | _d S )NFr   )rK   rS   rT   rV   rL   rO   rP   rQ   )r"   rB   r   r   r   r#   ;  s    zDataQueue.__init__r$   c                 C   s
   t | jS r!   )r}   rQ   r%   r   r   r   __len__C  s    zDataQueue.__len__c                 C   s   | j S r!   rr   r%   r   r   r   rs   F  s    zDataQueue.is_eofc                 C   s   | j o| j S r!   rt   r%   r   r   r   ru   I  s    zDataQueue.at_eofc                 C   s   | j S r!   rb   r%   r   r   r   rc   L  s    zDataQueue.exceptionrd   c                 C   s.   d| _ || _| j}|d ur*d | _t|| d S r   )rS   rV   rT   r   rg   r   r   r   r   O  s    zDataQueue.set_exceptionr   r   c                 C   s@   |  j |7  _ | j||f | j}|d ur<d | _t|d  d S r!   )rL   rQ   r]   rT   r   r   r   r   r   r   X  s    zDataQueue.feed_datac                 C   s(   d| _ | j}|d ur$d | _t|d  d S r   )rS   rT   r   )r"   rh   r   r   r   rq   a  s
    zDataQueue.feed_eofc              	      s   | j sV| jsV| jrJ | j | _z| jI d H  W n" tjtjfyT   d | _ Y n0 | j r|| j  \}}|  j	|8  _	|S | j
d ur| j
ntd S r!   )rQ   rS   rT   rK   rv   rI   CancelledErrorTimeoutErrorr   rL   rV   r   r"   rx   r   r   r   r   r8   i  s    

zDataQueue.readc                 C   s
   t | jS r!   )r   r8   r%   r   r   r   r&   }  s    zDataQueue.__aiter__)r   )r   r   r   r   rI   r   r#   r@   r   r3   rs   ru   r   r   rc   r   r   r   rq   r8   r   r&   r   r   r   r   r   8  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)rC   rD   rB   r    c                   s"   t  j|d || _|d | _d S )N)rB   rE   )superr#   rF   _limit)r"   rC   rD   rB   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   rF   r   r   r   r   r   r   r     s    zFlowControlDataQueue.feed_datar$   c                    sX   z2t   I d H W | j| jk r0| jjr0| j  S n | j| jk rR| jjrR| j  0 d S r!   )r   r8   rL   r   rF   r   r   r%   r   r   r   r8     s    
 zFlowControlDataQueue.read)r   )r   r   r   r   r   r@   rI   r   r#   r   r   r8   __classcell__r   r   r   r   r     s   r   )#rI   rO   rz   typingr   r   r   r   r   r   r   r	   r
   base_protocolr   helpersr   r   r   r   logr   __all__r   rm   r   r   r-   r4   r   r   r   __annotations__r   r   r   r   r   r   <module>   s(   
,   &;I