a
     ÑOcQ  ã                   @   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 ddlmZ ddlmZmZmZ ddl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ÚGenericÚListÚOptionalÚTupleÚTypeVaré   )ÚBaseProtocol)ÚBaseTimerContextÚset_exceptionÚ
set_result)Úinternal_logger)ÚFinal)Ú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   úF/var/www/html/gsl.tools/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"   ,   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)r.   Ú	readchunkr(   r)   r   r   r   r+   2   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%   :   s    z AsyncStreamReaderMixin.__aiter__©Únr   c                    s   t ‡ ‡fdd„ƒS )zzReturns an asynchronous iterator that yields chunks of size n.

        Python-3.5 available for Python 3.5+ only
        c                      s
   ˆ  ˆ ¡S r    )Úreadr   ©r6   r!   r   r   Ú<lambda>C   r'   z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>)r   ©r!   r6   r   r8   r   Úiter_chunked=   s    ÿz#AsyncStreamReaderMixin.iter_chunkedc                 C   s
   t | jƒS )zoYield all available data as soon as it is received.

        Python-3.5 available for Python 3.5+ only
        )r   Úreadanyr$   r   r   r   Úiter_anyF   s    zAsyncStreamReaderMixin.iter_anyc                 C   s   t | ƒS )zçYield 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.

        Python-3.5 available for Python 3.5+ only
        )r,   r$   r   r   r   Úiter_chunksM   s    z"AsyncStreamReaderMixin.iter_chunksN)r   r   r   r   r1   r%   Úintr;   r=   r,   r>   r   r   r   r   r3   9   s   	r3   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Úlimitr@   rA   r   c                C   sv   || _ || _|d | _|d u r&t ¡ }|| _d| _d| _d | _t	 
¡ | _d| _d| _d | _d | _d | _|| _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Ú
_exceptionÚ_timerÚ_eof_callbacks)r!   rB   rC   r@   rA   r   r   r   r"   h   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=%rz<%s>ú )
Ú	__class__r   rJ   ÚappendrQ   rF   rG   rR   rT   Újoin)r!   Úinfor   r   r   Ú__repr__‚   s    


zStreamReader.__repr__c                 C   s   | j | jfS r    )rF   rG   r$   r   r   r   Úget_read_buffer_limits�   s    z#StreamReader.get_read_buffer_limitsc                 C   s   | j S r    ©rT   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    )rT   rV   ÚclearrR   r   rS   ©r!   rb   Ú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)rQ   Ú	Exceptionr   r`   rV   rZ   ©r!   rg   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 )NTri   )	rQ   rR   r   rS   rV   rj   r   r`   rc   )r!   re   Úcbr   r   r   Úfeed_eof­   s    



zStreamReader.feed_eofc                 C   s   | j S )z&Return True if  'feed_eof' was called.©rQ   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.©rQ   rO   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    )rQ   rS   rI   Ú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)rD   )Ú
stacklevelNr   )
ÚwarningsÚwarnÚDeprecationWarningrP   rO   rJ   ÚlenrK   Ú
appendleftÚ_eof_counter)r!   ru   r   r   r   Úunread_dataÕ   s    üzStreamReader.unread_data©ru   Ú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)rQ   rJ   rz   rO   rZ   Útotal_bytesrR   r   rG   rE   Ú_reading_pausedÚpause_reading©r!   ru   r   re   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)rL   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 firstéÿÿÿÿr   )rL   r…   r€   rZ   rR   r   )r!   Úposre   r   r   r   Úend_http_chunk_receiving  s    
ÿ

z%StreamReader.end_http_chunk_receiving)Ú	func_namer   c                 Ã   s€   | j d urtd| ƒ‚| j ¡  }| _ zL| jr`| j� |I d H  W d   ƒ qj1 sT0    Y  n
|I d H  W d | _ nd | _ 0 d S )NzH%s() called while another coroutine is already waiting for incoming data)rR   r…   rI   rs   rU   )r!   rŠ   re   r   r   r   Ú_wait!  s    
ÿÿ*zStreamReader._waitc                 Ã   s   |   ¡ I d H S r    )Ú	readuntilr$   r   r   r   r4   6  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 }|  |rn|| nd¡}||7 }|t |ƒ7 }|r�d}|| jkr8tdƒ‚q8| jr¬qÂ|r4|  	d	¡I d H  q4|S )
Nr   z,Separator should be at least one-byte stringr'   Tr
   r‡   FzChunk too bigrŒ   )
rz   Ú
ValueErrorrT   rO   rP   ÚfindÚ_read_nowait_chunkrG   rQ   r‹   )	r!   rŽ   ZseplenÚchunkÚ
chunk_sizeZ
not_enoughÚoffsetZicharru   r   r   r   rŒ   9  s0    



zStreamReader.readuntilr‡   r5   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 r„g }|  ¡ 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'   r7   )rT   rQ   rO   Úgetattrr|   r   Úwarningr<   rZ   r[   r‹   Ú_read_nowait)r!   r6   ÚblocksÚblockr   r   r   r7   [  s*    

ý
zStreamReader.readc                 Ã   s8   | j d ur| j ‚| js.| js.|  d¡I d H  q|  d¡S )Nr<   r‡   )rT   rO   rQ   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‡   Fr/   r0   )rT   rL   ÚpoprK   r™   r   r˜   rO   r‘   rQ   r‹   )r!   rˆ   r   r   r   r0   ‘  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'   )rT   r7   r[   rH   ÚIncompleteReadErrorrz   rZ   )r!   r6   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.)rT   rR   Ú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‡   )rO   rP   rz   ÚpopleftrJ   rK   rL   r�   rF   rE   r�   Úresume_reading)r!   r6   Zfirst_bufferr”   ru   Zchunk_splitsr   r   r   r‘   Ñ  s$    



zStreamReader._read_nowait_chunkc                 C   sP   g }| j r>|  |¡}| |¡ |dkr|t|ƒ8 }|dkrq>q|rLd |¡S dS )z6Read not more than n bytes, or whole buffer if n == -1r‡   r   r'   )rO   r‘   rZ   rz   r[   )r!   r6   Úchunksr’   r   r   r   r™   ì  s    

zStreamReader._read_nowait)r   )r�   )r‡   )r‡   ))r   r   r   r   r€   r   r?   r   r   rH   ÚAbstractEventLoopr"   Ústrr]   r   r^   ÚBaseExceptionr`   r   r   rl   rn   r2   rp   rr   rt   r1   r}   r„   r†   r‰   r‹   r4   rŒ   r7   r<   r0   r    r¢   r‘   r™   r   r   r   r   r   X   sD   úù	"*"r   c                   @   s  e Zd Zd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 S r    r   r$   r   r   r   r"   ü  s    zEmptyStreamReader.__init__c                 C   s   d S r    r   r$   r   r   r   r`   ÿ  s    zEmptyStreamReader.exceptionra   c                 C   s   d S r    r   )r!   rb   r   r   r   r     s    zEmptyStreamReader.set_exceptionrf   c                 C   s,   z
|ƒ  W n t y&   t d¡ Y n0 d S rh   )rj   r   r`   rk   r   r   r   rl     s    
zEmptyStreamReader.on_eofc                 C   s   d S r    r   r$   r   r   r   rn     s    zEmptyStreamReader.feed_eofc                 C   s   dS ©NTr   r$   r   r   r   rp     s    zEmptyStreamReader.is_eofc                 C   s   dS rª   r   r$   r   r   r   rr     s    zEmptyStreamReader.at_eofc                 Ã   s   d S r    r   r$   r   r   r   rt     s    zEmptyStreamReader.wait_eofr   )ru   r6   r   c                 C   s   d S r    r   )r!   ru   r6   r   r   r   r„     s    zEmptyStreamReader.feed_datac                 Ã   s   dS r&   r   r$   r   r   r   r4     s    zEmptyStreamReader.readliner‡   r5   c                 Ã   s   dS r&   r   r:   r   r   r   r7     s    zEmptyStreamReader.readc                 Ã   s   dS r&   r   r$   r   r   r   r<   "  s    zEmptyStreamReader.readanyc                 Ã   s   dS )Nrœ   r   r$   r   r   r   r0   %  s    zEmptyStreamReader.readchunkc                 Ã   s   t  d|¡‚d S r&   )rH   rž   r:   r   r   r   r    (  s    zEmptyStreamReader.readexactlyc                 C   s   dS r&   r   r:   r   r   r   r¢   +  s    zEmptyStreamReader.read_nowait)r   )r‡   )r‡   )r   r   r   r"   r   r¨   r`   r   r   rl   rn   r2   rp   rr   rt   r1   r?   r„   r4   r7   r<   r   r0   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)rA   r   c                 C   s,   || _ d| _d | _d | _d| _t ¡ | _d S )NFr   )rI   rQ   rR   rT   rJ   rM   rN   rO   )r!   rA   r   r   r   r"   5  s    zDataQueue.__init__r#   c                 C   s
   t | jƒS r    )rz   rO   r$   r   r   r   Ú__len__=  s    zDataQueue.__len__c                 C   s   | j S r    ro   r$   r   r   r   rp   @  s    zDataQueue.is_eofc                 C   s   | j o| j S r    rq   r$   r   r   r   rr   C  s    zDataQueue.at_eofc                 C   s   | j S r    r_   r$   r   r   r   r`   F  s    zDataQueue.exceptionra   c                 C   s.   d| _ || _| j}|d ur*d | _t||ƒ d S rª   )rQ   rT   rR   r   rd   r   r   r   r   I  s    zDataQueue.set_exceptionr   r~   c                 C   s@   |  j |7  _ | j ||f¡ | j}|d ur<d | _t|d ƒ d S r    )rJ   rO   rZ   rR   r   rƒ   r   r   r   r„   R  s    zDataQueue.feed_datac                 C   s(   d| _ | j}|d ur$d | _t|d ƒ d S rª   )rQ   rR   r   )r!   re   r   r   r   rn   [  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    )rO   rQ   rR   rI   rs   rH   ZCancelledErrorÚTimeoutErrorr£   rJ   rT   r   ©r!   ru   r   r   r   r   r7   c  s    

zDataQueue.readc                 C   s
   t | jƒS r    )r   r7   r$   r   r   r   r%   w  s    zDataQueue.__aiter__)r   )r   r   r   r   rH   r¦   r"   r?   r«   r2   rp   rr   r   r¨   r`   r   r   r„   rn   r7   r   r%   r   r   r   r   r   2  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)rB   rC   rA   r   c                   s"   t ƒ j|d� || _|d | _d S )N)rA   rD   )Úsuperr"   rE   Ú_limit)r!   rB   rC   rA   ©rY   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„   rJ   r¯   rE   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®   r7   rJ   r¯   rE   r�   r¤   r$   r°   r   r   r7   �  s    
ý ÿzFlowControlDataQueue.read)r   )r   r   r   r   r   r?   rH   r¦   r"   r   r„   r7   Ú__classcell__r   r   r°   r   r   {  s   þr   )#rH   rM   rw   Útypingr   r   r   r   r   r   r   r	   Zbase_protocolr   Zhelpersr   r   r   Úlogr   Ztypedefsr   Ú__all__r   rj   r   r   r,   r3   r   r©   r   Ú__annotations__r   r   r   r   r   r   Ú<module>   s*   
(   &4I