o
    RÊÆ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   ú\/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/aiohttp/streams.pyr      s    r   c                   @   sB   e Zd Zdeg ee f ddfdd„Zddd„Zdefd	d
„ZdS )ÚAsyncStreamIteratorÚ	read_funcÚreturnNc                 C   ó
   || _ d S ©N)r   )Úselfr   r   r   r   Ú__init__$   ó   
zAsyncStreamIterator.__init__úAsyncStreamIterator[_T]c                 C   ó   | S r"   r   ©r#   r   r   r   Ú	__aiter__'   ó   zAsyncStreamIterator.__aiter__c                 Ã   s8   �z	|   ¡ I d H }W n	 ty   t‚w |dkrt‚|S ©Nó    )r   r   ÚStopAsyncIteration©r#   Úrvr   r   r   Ú	__anext__*   s   €ÿzAsyncStreamIterator.__anext__)r    r&   )	r   r   r   r   r   r   r$   r)   r0   r   r   r   r   r   #   s    
r   c                   @   s6   e Zd Zddd„Zddd„Zdeeef fd	d
„ZdS )ÚChunkTupleAsyncStreamIteratorÚstreamr   r    Nc                 C   r!   r"   )Ú_stream)r#   r2   r   r   r   r$   5   r%   z&ChunkTupleAsyncStreamIterator.__init__c                 C   r'   r"   r   r(   r   r   r   r)   8   r*   z'ChunkTupleAsyncStreamIterator.__aiter__c                 Ã   s"   �| j  ¡ I d H }|dkrt‚|S )N©r,   F)r3   Ú	readchunkr-   r.   r   r   r   r0   ;   s
   €z'ChunkTupleAsyncStreamIterator.__anext__)r2   r   r    N)r    r1   )	r   r   r   r$   r)   r	   ÚbytesÚboolr0   r   r   r   r   r1   4   s    

r1   c                   @   sT   e Zd Zdee fdd„Zdedee fdd„Zdee fdd„Zde	fd	d
„Z
dS )ÚAsyncStreamReaderMixinr    c                 C   ó
   t | jƒS r"   )r   Úreadliner(   r   r   r   r)   C   r%   z AsyncStreamReaderMixin.__aiter__Únc                    s   t ‡ ‡fdd„ƒS )z>Returns an asynchronous iterator that yields chunks of size n.c                      s
   ˆ  ˆ ¡S r"   )Úreadr   ©r;   r#   r   r   Ú<lambda>H   s   
 z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>)r   ©r#   r;   r   r=   r   Úiter_chunkedF   s   z#AsyncStreamReaderMixin.iter_chunkedc                 C   r9   )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 )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.
        )r1   r(   r   r   r   Úiter_chunksN   s   z"AsyncStreamReaderMixin.iter_chunksN)r   r   r   r   r6   r)   Úintr@   rB   r1   rC   r   r   r   r   r8   B   s
    r8   c                   @   sÊ  e Zd ZdZdZdddœdededee dee	j
 d	df
d
d„Zd	efdd„Zd	eeef fdd„Zd	ee fdd„Zded	dfdd„Zdeg df d	dfdd„ZdCdd„Zd	efdd„Zd	efdd„ZdCdd„Zd ed	dfd!d"„ZdDd ed#ed	dfd$d%„ZdCd&d'„ZdCd(d)„Zd*ed	dfd+d,„Zd	efd-d.„Z dEd0ed	efd1d2„Z!dFd4ed	efd5d6„Z"d	efd7d8„Z#d	eeef fd9d:„Z$d4ed	efd;d<„Z%dFd4ed	efd=d>„Z&d4ed	efd?d@„Z'd4ed	efdAdB„Z(dS )Gr   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ÚlimitrE   rF   r    c                C   s„   || _ || _|d | _|d u rt ¡ }|| _d| _d| _d | _t	 
¡ | _d| _d| _d | _d | _d | _|d u r:tƒ 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#   rG   rH   rE   rF   r   r   r   r$   g   s"   


zStreamReader.__init__c                 C   sŠ   | j jg}| jr| d| j ¡ | jr| d¡ | jdkr(| d| j| jf ¡ | jr3| 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   rP   ÚappendrW   rK   rL   rX   rZ   Újoin)r#   Úinfor   r   r   Ú__repr__�   s   


zStreamReader.__repr__c                 C   s   | j | jfS r"   )rK   rL   r(   r   r   r   Úget_read_buffer_limits�   ó   z#StreamReader.get_read_buffer_limitsc                 C   ó   | j S r"   ©rZ   r(   r   r   r   Ú	exception’   ó   zStreamReader.exceptionÚexcc                 C   sT   || _ | j ¡  | j}|d urd | _t||ƒ | j}|d ur(d | _t||ƒ d S d S r"   )rZ   r\   ÚclearrX   r   rY   ©r#   rk   Úwaiterr   r   r   r   •   s   

þzStreamReader.set_exceptionÚcallbackc                 C   sB   | j rz|ƒ  W d S  ty   t d¡ Y d S w | j |¡ d S ©NúException in eof callback)rW   Ú	Exceptionr   ri   r\   ra   ©r#   ro   r   r   r   Úon_eof£   s   ÿzStreamReader.on_eofc              	   C   s‚   d| _ | j}|d urd | _t|d ƒ | j}|d ur!d | _t|d ƒ | jD ]}z|ƒ  W q$ ty9   t d¡ Y q$w | j ¡  d S )NTrq   )	rW   rX   r   rY   r\   rr   r   ri   rl   )r#   rn   Úcbr   r   r   Úfeed_eof¬   s    



ÿzStreamReader.feed_eofc                 C   rg   )z&Return True if  'feed_eof' was called.©rW   r(   r   r   r   Úis_eofÁ   s   zStreamReader.is_eofc                 C   ó   | j o| j S )z=Return True if the buffer is empty and 'feed_eof' was called.©rW   rU   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 | _d S d | _w r"   )rW   rY   rO   Úcreate_futurer(   r   r   r   Úwait_eofÉ   s   €zStreamReader.wait_eofÚdatac                 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)rI   )Ú
stacklevelNr   )
ÚwarningsÚwarnÚDeprecationWarningrV   rU   rP   ÚlenrQ   Ú
appendleftÚ_eof_counter)r#   r~   r   r   r   Úunread_dataÔ   s   ü
zStreamReader.unread_dataÚsizec                 C   sŽ   | j rJ dƒ‚|sd S |  jt|ƒ7  _| j |¡ |  jt|ƒ7  _| j}|d ur2d | _t|d ƒ | j| jkrC| j	j
sE| j	 ¡  d S d S d S )Nzfeed_data after feed_eof)rW   rP   rƒ   rU   ra   Útotal_bytesrX   r   rL   rJ   Ú_reading_pausedÚpause_reading©r#   r~   r‡   rn   r   r   r   Ú	feed_dataè   s   
ÿzStreamReader.feed_datac                 C   s&   | j d u r| jrtdƒ‚g | _ d S d S )Nz?Called begin_http_chunk_receiving whensome data was already fed)rR   rˆ   ÚRuntimeErrorr(   r   r   r   Úbegin_http_chunk_receivingú   s   
ÿ
ûz'StreamReader.begin_http_chunk_receivingc                 C   sh   | j d u r	tdƒ‚| j r| j d nd}| j|krd S | j  | j¡ | j}|d ur2d | _t|d ƒ d S d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstéÿÿÿÿr   )rR   r�   rˆ   ra   rX   r   )r#   Úposrn   r   r   r   Úend_http_chunk_receiving  s   
ÿ

þz%StreamReader.end_http_chunk_receivingÚ	func_namec                 Ã   sz   �| j d urtd| ƒ‚| j ¡  }| _ z$| j� |I d H  W d   ƒ n1 s(w   Y  W d | _ d S W d | _ d S d | _ w )NzH%s() called while another coroutine is already waiting for incoming data)rX   r�   rO   r|   r[   )r#   r’   rn   r   r   r   Ú_wait   s   €
ÿÿÿ
ýzStreamReader._waitc                 Ã   s   �|   ¡ I d H S r"   )Ú	readuntilr(   r   r   r   r:   2  s   €zStreamReader.readlineó   
Ú	separatorc           	      Ã   sÞ   �t |ƒ}|dkrtdƒ‚| jd ur| j‚d}d}d}|rm| jr[|r[| j}| jd  ||¡d }|  |r<|| | d nd¡}||7 }|t |ƒ7 }|rMd}|| jkrVtdƒ‚| jr[|s"| jra	 |S |rk|  	d	¡I d H  |s|S )
Nr   z,Separator should be at least one-byte stringr,   Tr   r�   FzChunk too bigr”   )
rƒ   Ú
ValueErrorrZ   rU   rV   ÚfindÚ_read_nowait_chunkrL   rW   r“   )	r#   r–   ÚseplenÚchunkÚ
chunk_sizeÚ
not_enoughÚoffsetÚicharr~   r   r   r   r”   5  s<   €

ÿ

óýìzStreamReader.readuntilr�   r;   c                 Ã   s¼   �| j d ur	| j ‚	 | jr%| js%t| ddƒd | _| jdkr%tjddd� |s)dS |dk rEg }	 |  ¡ I d H }|s:n| |¡ q0d 	|¡S | jsY| jsY|  
d	¡I d H  | jsY| jrK|  |¡S )
NTr…   r   r   é   zEMultiple access to StreamReader in eof state, might be infinite loop.)Ú
stack_infor,   r<   )rZ   rW   rU   Úgetattrr…   r   ÚwarningrA   ra   rb   r“   Ú_read_nowait)r#   r;   ÚblocksÚblockr   r   r   r<   Y  s4   €

ý
ü
ÿ
zStreamReader.readc                 Ã   sD   �| j d ur	| j ‚| js| js|  d¡I d H  | js| jr|  d¡S )NrA   r�   )rZ   rU   rW   r“   r¤   r(   r   r   r   rA   ƒ  s   €
ÿ
zStreamReader.readanyc                 Ã   s’   �	 | j dur
| j ‚| jr1| j d¡}|| jkrdS || jkr)|  || j ¡dfS t d¡ | js| jr;|  d¡dfS | j	r@dS |  
d	¡I dH  q)
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.
        TNr   ©r,   TzESkipping HTTP chunk end due to data consumption beyond chunk boundaryr�   Fr4   r5   )rZ   rR   ÚpoprQ   r¤   r   r£   rU   r™   rW   r“   )r#   r�   r   r   r   r5   �  s(   €


ÿúèzStreamReader.readchunkc                 Ã   sx   �| j d ur	| j ‚g }|dkr7|  |¡I d H }|s(d |¡}t |t|ƒ| ¡‚| |¡ |t|ƒ8 }|dksd |¡S )Nr   r,   )rZ   r<   rb   rM   ÚIncompleteReadErrorrƒ   ra   )r#   r;   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.)rZ   rX   Údoner�   r¤   r?   r   r   r   Úread_nowaitÀ  s   
ÿ
zStreamReader.read_nowaitc                 C   sî   | j d }| j}|dkr$t|ƒ| |kr$|||| … }|  j|7  _n|r5| j  ¡  ||d … }d| _n| j  ¡ }|  jt|ƒ8  _|  jt|ƒ7  _| j}|rf|d | jk rf| d¡ |rf|d | jk sX| j| jk ru| j	j
ru| j	 ¡  |S )Nr   r�   )rU   rV   rƒ   ÚpopleftrP   rQ   rR   r¨   rK   rJ   r‰   Úresume_reading)r#   r;   Úfirst_bufferrž   r~   Úchunk_splitsr   r   r   r™   Ï  s&   



ÿ
zStreamReader._read_nowait_chunkc                 C   s^   | j  ¡  g }| jr&|  |¡}| |¡ |dkr#|t|ƒ8 }|dkr#n| js
|r-d |¡S dS )z6Read not more than n bytes, or whole buffer if n == -1r�   r   r,   )r[   Úassert_timeoutrU   r™   ra   rƒ   rb   )r#   r;   Úchunksr›   r   r   r   r¤   ê  s   


úzStreamReader._read_nowait©r    N©r   )r•   ©r�   ))r   r   r   r   rˆ   r   rD   r   r   rM   ÚAbstractEventLoopr$   Ústrrd   r	   re   ÚBaseExceptionri   r   r   rt   rv   r7   rx   r{   r}   r6   r†   rŒ   rŽ   r‘   r“   r:   r”   r<   rA   r5   r«   r­   r™   r¤   r   r   r   r   r   W   sN    úþýûú
ù
	


$*"r   c                   @   s  e Zd Zd)dd„Zdefdd„Zdee fdd„Zd	eddfd
d„Z	de
g df ddfdd„Zd)dd„Zdefdd„Zdefdd„Zd)dd„Zd*dededdfdd„Zdefdd„Zd+dedefdd „Zdefd!d"„Zdeeef fd#d$„Zdedefd%d&„Zd+dedefd'd(„ZdS ),ÚEmptyStreamReaderr    Nc                 C   s
   d| _ d S )NF©Ú_read_eof_chunkr(   r   r   r   r$   û  r%   zEmptyStreamReader.__init__c                 C   s   d| j j S )Nr^   )r`   r   r(   r   r   r   rd   þ  rf   zEmptyStreamReader.__repr__c                 C   ó   d S r"   r   r(   r   r   r   ri     r*   zEmptyStreamReader.exceptionrk   c                 C   r½   r"   r   )r#   rk   r   r   r   r     r*   zEmptyStreamReader.set_exceptionro   c                 C   s,   z|ƒ  W d S  t y   t d¡ Y d S w rp   )rr   r   ri   rs   r   r   r   rt     s
   ÿzEmptyStreamReader.on_eofc                 C   r½   r"   r   r(   r   r   r   rv     r*   zEmptyStreamReader.feed_eofc                 C   ó   dS ©NTr   r(   r   r   r   rx     r*   zEmptyStreamReader.is_eofc                 C   r¾   r¿   r   r(   r   r   r   r{     r*   zEmptyStreamReader.at_eofc                 Ã   s   �d S r"   r   r(   r   r   r   r}     ó   €zEmptyStreamReader.wait_eofr   r~   r;   c                 C   r½   r"   r   )r#   r~   r;   r   r   r   rŒ     r*   zEmptyStreamReader.feed_datac                 Ã   ó   �dS r+   r   r(   r   r   r   r:     rÀ   zEmptyStreamReader.readliner�   c                 Ã   rÁ   r+   r   r?   r   r   r   r<     rÀ   zEmptyStreamReader.readc                 Ã   rÁ   r+   r   r(   r   r   r   rA   $  rÀ   zEmptyStreamReader.readanyc                 Ã   s   �| j s	d| _ dS dS )NTr4   r§   r»   r(   r   r   r   r5   '  s
   €zEmptyStreamReader.readchunkc                 Ã   s   �t  d|¡‚r+   )rM   r©   r?   r   r   r   r«   .  s   €zEmptyStreamReader.readexactlyc                 C   r¾   r+   r   r?   r   r   r   r­   1  r*   zEmptyStreamReader.read_nowaitr´   rµ   r¶   )r   r   r   r$   r¸   rd   r   r¹   ri   r   r   rt   rv   r7   rx   r{   r}   r6   rD   rŒ   r:   r<   rA   r	   r5   r«   r­   r   r   r   r   rº   ú  s"    


rº   r   c                   @   s´   e Zd ZdZdejddfdd„Zdefdd„Zde	fd	d
„Z
de	fdd„Zdee fdd„Zdeddfdd„Zddededdfdd„Zddd„Zdefdd„Zdee fdd„ZdS )r   z>DataQueue is a general-purpose blocking queue with one reader.rF   r    Nc                 C   s,   || _ d| _d | _d | _d| _t ¡ | _d S )NFr   )rO   rW   rX   rZ   rP   rS   rT   rU   )r#   rF   r   r   r   r$   ;  s   zDataQueue.__init__c                 C   r9   r"   )rƒ   rU   r(   r   r   r   Ú__len__C  r%   zDataQueue.__len__c                 C   rg   r"   rw   r(   r   r   r   rx   F  rj   zDataQueue.is_eofc                 C   ry   r"   rz   r(   r   r   r   r{   I  s   zDataQueue.at_eofc                 C   rg   r"   rh   r(   r   r   r   ri   L  rj   zDataQueue.exceptionrk   c                 C   s2   d| _ || _| j}|d urd | _t||ƒ d S d S r¿   )rW   rZ   rX   r   rm   r   r   r   r   O  s   þzDataQueue.set_exceptionr   r~   r‡   c                 C   sD   |  j |7  _ | j ||f¡ | j}|d ur d | _t|d ƒ d S d S r"   )rP   rU   ra   rX   r   r‹   r   r   r   rŒ   X  s   þzDataQueue.feed_datac                 C   s,   d| _ | j}|d urd | _t|d ƒ d S d S r¿   )rW   rX   r   )r#   rn   r   r   r   rv   a  s   þzDataQueue.feed_eofc              	   Ã   sŽ   �| j s*| js*| jrJ ‚| j ¡ | _z| jI d H  W n tjtjfy)   d | _‚ w | j r=| j  ¡ \}}|  j	|8  _	|S | j
d urE| j
‚t‚r"   )rU   rW   rX   rO   r|   rM   ÚCancelledErrorÚTimeoutErrorr®   rP   rZ   r   ©r#   r~   r‡   r   r   r   r<   i  s"   €
þ
zDataQueue.readc                 C   r9   r"   )r   r<   r(   r   r   r   r)   }  r%   zDataQueue.__aiter__rµ   r´   )r   r   r   r   rM   r·   r$   rD   rÂ   r7   rx   r{   r   r¹   ri   r   r   rŒ   rv   r<   r   r)   r   r   r   r   r   8  s    	
	r   c                       sb   e Zd ZdZdededejddf‡ fdd„Zdd
e	deddf‡ fdd„Z
de	f‡ fdd„Z‡  ZS )r   zlFlowControlDataQueue resumes and pauses an underlying stream.

    It is a destination for parsed data.
    rG   rH   rF   r    Nc                   s"   t ƒ j|d� || _|d | _d S )N)rF   rI   )Úsuperr$   rJ   Ú_limit)r#   rG   rH   rF   ©r`   r   r   r$   ‡  s   zFlowControlDataQueue.__init__r   r~   r‡   c                    s8   t ƒ  ||¡ | j| jkr| jjs| j ¡  d S d S d S r"   )rÆ   rŒ   rP   rÇ   rJ   r‰   rŠ   rÅ   rÈ   r   r   rŒ   �  s   ÿzFlowControlDataQueue.feed_datac                 ƒ   s\   �zt ƒ  ¡ I d H W | j| jk r| jjr| j ¡  S S S | j| jk r,| jjr-| j ¡  w w w r"   )rÆ   r<   rP   rÇ   rJ   r‰   r¯   r(   rÈ   r   r   r<   •  s   €ÿÿzFlowControlDataQueue.readrµ   )r   r   r   r   r   rD   rM   r·   r$   r   rŒ   r<   Ú__classcell__r   r   rÈ   r   r   �  s    ÿÿÿþr   )#rM   rS   r€   Útypingr   r   r   r   r   r   r   r	   r
   Úbase_protocolr   Úhelpersr   r   r   r   Úlogr   Ú__all__r   rr   r   r   r1   r8   r   rº   r   Ú__annotations__r   r   r   r   r   r   Ú<module>   s*   
 ,   &;I