o
    mip]                     @   s0  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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)LineTooLong)internal_logger)EMPTY_PAYLOAD	EofStreamStreamReader	DataQueue_Tc                   @   s   e Zd ZdZdS )r   zeof stream indication.N)__name__
__module____qualname____doc__ r   r   M/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/aiohttp/streams.pyr   %   s    r   c                   @   sF   e Zd 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_funcr!   returnNc                 C   
   || _ d S Nr    )selfr!   r   r   r   __init__-      
zAsyncStreamIterator.__init__AsyncStreamIterator[_T]c                 C      | S r$   r   r%   r   r   r   	__aiter__0      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__3   s   zAsyncStreamIterator.__anext__)r"   r(   )
r   r   r   	__slots__r   r   r   r&   r+   r2   r   r   r   r   r   )   s
    
r   c                   @   s:   e Zd ZdZdddZddd	Zdeeef fd
dZ	dS )ChunkTupleAsyncStreamIterator_streamstreamr   r"   Nc                 C   r#   r$   r5   )r%   r7   r   r   r   r&   A   r'   z&ChunkTupleAsyncStreamIterator.__init__c                 C   r)   r$   r   r*   r   r   r   r+   D   r,   z'ChunkTupleAsyncStreamIterator.__aiter__c                    s"   | j  I d H }|dkrt|S )Nr.   F)r6   	readchunkr/   r0   r   r   r   r2   G   s
   z'ChunkTupleAsyncStreamIterator.__anext__)r7   r   r"   N)r"   r4   )
r   r   r   r3   r&   r+   r	   bytesboolr2   r   r   r   r   r4   =   s
    

r4   c                   @   sX   e Zd 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   r"   c                 C   
   t | jS r$   )r   readliner*   r   r   r   r+   R   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>W   s   
 z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>)r   r%   r?   r   rA   r   iter_chunkedU   s   z#AsyncStreamReaderMixin.iter_chunkedc                 C   r=   )z3Yield all available data as soon as it is received.)r   readanyr*   r   r   r   iter_anyY   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.
        )r4   r*   r   r   r   iter_chunks]   s   z"AsyncStreamReaderMixin.iter_chunksN)r   r   r   r3   r   r:   r+   intrD   rF   r4   rG   r   r   r   r   r<   N   s    r<   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efdeded	dfddZdeg df d	dfddZdKddZd	efddZd	efddZdKdd Zed	efd!d"Zd#ed	dfd$d%ZdLd#ed'ed	dfd(d)ZdKd*d+Z dKd,d-Z!d.ed	dfd/d0Z"dd1d2ee d	efd3d4Z#	5dMdd6d7ed8ee d	efd9d:Z$dNd<ed	efd=d>Z%d	efd?d@Z&d	eeef fdAdBZ'd<ed	efdCdDZ(dNd<ed	efdEdFZ)d<ed	efdGdHZ*d<ed	efdIdJZ+dS )Or   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():
            ...

    )	_protocol
_low_water_high_water_low_water_chunks_high_water_chunks_loop_size_cursor_http_chunk_splits_buffer_buffer_offset_eof_waiter_eof_waiter
_exception_timer_eof_callbacks_eof_countertotal_bytestotal_compressed_bytesN)timerloopprotocollimitr]   r^   r"   c                C   s   || _ || _|d | _|d u rt }td|d | _td| jd | _|| _d| _	d| _
d | _t | _d| _d| _d | _d | _d | _|d u rKt n|| _g | _d| _d| _d | _d S )N         r   F)rI   rJ   rK   asyncioget_event_loopmaxrM   rL   rN   rO   rP   rQ   collectionsdequerR   rS   rT   rU   rV   rW   r   rX   rY   rZ   r[   r\   )r%   r_   r`   r]   r^   r   r   r   r&      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   rO   appendrT   rJ   rK   rU   rW   join)r%   infor   r   r   __repr__   s   


zStreamReader.__repr__c                 C   s   | j | jfS r$   )rJ   rK   r*   r   r   r   get_read_buffer_limits      z#StreamReader.get_read_buffer_limitsc                 C      | j S r$   rW   r*   r   r   r   	exception      zStreamReader.exceptionexc	exc_causec                 C   sX   || _ | j  | j}|d urd | _t||| | j}|d ur*d | _t||| d S d S r$   )rW   rY   clearrU   r   rV   r%   rw   rx   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)rT   	Exceptionr   ru   rY   rm   r%   r|   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jr*| j  | jD ]}z|  W q- tyB   t	
d Y q-w | j  d S )NTr~   )rT   rU   r   rV   rI   _reading_pausedresume_readingrY   r   r   ru   ry   )r%   r{   cbr   r   r   feed_eof   s$   




zStreamReader.feed_eofc                 C   rs   )z&Return True if  'feed_eof' was called.rT   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.rT   rR   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$   )rT   rV   rN   create_futurer*   r   r   r   wait_eof   s   zStreamReader.wait_eofc                 C   s   | j d u r| jS | j S r$   )r\   r[   r*   r   r   r   total_raw_bytes  s   
zStreamReader.total_raw_bytes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)ra   )
stacklevelNr   )
warningswarnDeprecationWarningrS   rR   rO   lenrP   
appendleftrZ   )r%   r   r   r   r   unread_data  s   
zStreamReader.unread_datar   sizec                 C   s   | j rJ d|sd S t|}|  j|7  _| j| |  j|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)rT   r   rO   rR   rm   r[   rU   r   rK   rI   r   pause_reading)r%   r   r   data_lenr{   r   r   r   	feed_data!  s   
zStreamReader.feed_datac                 C   s*   | j d u r| jrtdt | _ d S d S )Nz@Called begin_http_chunk_receiving when some data was already fed)rQ   r[   RuntimeErrorrg   rh   r*   r   r   r   begin_http_chunk_receiving4  s   
z'StreamReader.begin_http_chunk_receivingc                 C   s   | j d u r	td| j r| j d nd}| j|krd S | j | j t| j | jkr2| jjs2| j  | j	}|d urCd | _	t
|d  d S d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )rQ   r   r[   rm   r   rM   rI   r   r   rU   r   )r%   posr{   r   r   r   end_http_chunk_receiving<  s"   



z%StreamReader.end_http_chunk_receiving	func_namec                    s   | j js	td| jd urtd| | j  }| _z$| j |I d H  W d    n1 s0w   Y  W d | _d S W d | _d S d | _w )NzConnection closed.zH%s() called while another coroutine is already waiting for incoming data)rI   	connectedr   rU   rN   r   rX   )r%   r   r{   r   r   r   _waitc  s"   

zStreamReader._waitmax_line_lengthr   c                   s   | j |dI d H S )Nmax_size)	readuntilr%   r   r   r   r   r>   x  s   zStreamReader.readline   
r   	separatorr   c          
         s   t |}|dkrtd| jd ur| jd}d}d}|p| j}|rx| jrf|rf| j}| jd ||d }| |rA|| | d nd}	||	7 }|t |	7 }|rRd}||krat|d d d	 || jrf|s'| j	rl	 |S |rv| 
d
I d H  |s"|S )Nr   z,Separator should be at least one-byte stringr.   Tr   r   Fd   s   ...r   )r   
ValueErrorrW   rK   rR   rS   find_read_nowait_chunkr   rT   r   )
r%   r   r   seplenchunk
chunk_size
not_enoughoffseticharr   r   r   r   r   {  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 )
NTrZ   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.)
stack_infor.   r@   )rW   rT   rR   getattrrZ   r   warningrE   rm   rn   r   _read_nowait)r%   r?   blocksblockr   r   r   r@     s4   




zStreamReader.readc                    sD   | j d ur	| j | js| js| dI d H  | js| jr| dS )NrE   r   )rW   rR   rT   r   r   r*   r   r   r   rE     s   

zStreamReader.readanyc                    s   	 | j dur
| j | jr0| j }|| 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.
        TNr.   TzESkipping HTTP chunk end due to data consumption beyond chunk boundaryr   Fr8   r9   )rW   rQ   popleftrP   r   r   r   rR   r   rT   r   )r%   r   r   r   r   r9     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.   )rW   r@   rn   rd   IncompleteReadErrorr   rm   )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.)rW   rU   doner   r   rC   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  }t|}|  j|8  _|  j|7  _| j}|re|d | jk re|  |re|d | jk sX| jjr| j| j	k r| jd u s|t| j| j
k r| j  |S )Nr   r   )rR   rS   r   r   rO   rP   rQ   rI   r   rJ   rL   r   )r%   r?   first_bufferr   r   r   chunk_splitsr   r   r   r     s0   




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.   )rX   assert_timeoutrR   r   rm   r   rn   )r%   r?   chunksr   r   r   r   r   ;  s   


zStreamReader._read_nowaitr"   Nr   )r   r   ),r   r   r   r   r3   r   rH   r   r   rd   AbstractEventLoopr&   strrp   r	   rq   BaseExceptionru   r   r   r   r   r   r;   r   r   r   propertyr   r:   r   r   r   r   r   r>   r   r@   rE   r9   r   r   r   r   r   r   r   r   r   f   sr    
"

	


'
'*"#r   c                   @   s0  e Zd ZdZd-ddZdefddZdee fdd	Z	e
fd
e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ddee 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 )0EmptyStreamReader_read_eof_chunkr"   Nc                 C   s   d| _ d| _d S )NFr   )r   r[   r*   r   r   r   r&   O  s   
zEmptyStreamReader.__init__c                 C   s   d| j j S )Nrj   )rl   r   r*   r   r   r   rp   S  rr   zEmptyStreamReader.__repr__c                 C      d S r$   r   r*   r   r   r   ru   V  r,   zEmptyStreamReader.exceptionrw   rx   c                 C   r   r$   r   )r%   rw   rx   r   r   r   r   Y  s   zEmptyStreamReader.set_exceptionr|   c                 C   s,   z|  W d S  t y   td Y d S w r}   )r   r   ru   r   r   r   r   r   `  s
   zEmptyStreamReader.on_eofc                 C   r   r$   r   r*   r   r   r   r   f  r,   zEmptyStreamReader.feed_eofc                 C      dS NTr   r*   r   r   r   r   i  r,   zEmptyStreamReader.is_eofc                 C   r   r   r   r*   r   r   r   r   l  r,   zEmptyStreamReader.at_eofc                    s   d S r$   r   r*   r   r   r   r   o     zEmptyStreamReader.wait_eofr   r   r?   c                 C   r   r$   r   )r%   r   r?   r   r   r   r   r  r,   zEmptyStreamReader.feed_datar   r   c                      dS r-   r   r   r   r   r   r>   u  r   zEmptyStreamReader.readliner   c                    r   r-   r   rC   r   r   r   r@   x  r   zEmptyStreamReader.readc                    r   r-   r   r*   r   r   r   rE   }  r   zEmptyStreamReader.readanyc                    s   | j s	d| _ dS dS )NTr8   r   r   r*   r   r   r   r9     s
   zEmptyStreamReader.readchunkc                    s   t d|r-   )rd   r   rC   r   r   r   r     s   zEmptyStreamReader.readexactlyc                 C   r   r-   r   rC   r   r   r   r     r,   zEmptyStreamReader.read_nowaitr   r   r   )r   r   r   r3   r&   r   rp   r   r   ru   r   r   r   r   r   r;   r   r   r   r:   rH   r   r>   r@   rE   r	   r9   r   r   r   r   r   r   r   K  s2    



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efde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.r^   r"   Nc                 C   s&   || _ d| _d | _d | _t | _d S )NF)rN   rT   rU   rW   rg   rh   rR   )r%   r^   r   r   r   r&     s
   zDataQueue.__init__c                 C   r=   r$   )r   rR   r*   r   r   r   __len__  r'   zDataQueue.__len__c                 C   rs   r$   r   r*   r   r   r   r     rv   zDataQueue.is_eofc                 C   r   r$   r   r*   r   r   r   r     s   zDataQueue.at_eofc                 C   rs   r$   rt   r*   r   r   r   ru     rv   zDataQueue.exceptionrw   rx   c                 C   s4   d| _ || _| j }d urd | _t||| d S d S r   )rT   rW   rU   r   rz   r   r   r   r     s   zDataQueue.set_exceptionr   r   r   c                 C   s6   | j ||f | j }d urd | _t|d  d S d S r$   )rR   rm   rU   r   )r%   r   r   r{   r   r   r   r     s
   zDataQueue.feed_datac                 C   s,   d| _ | j }d urd | _t|d  d S d S r   )rT   rU   r   )r%   r{   r   r   r   r     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 r6| j  \}}|S | j	d ur>| j	t
r$   )rR   rT   rU   rN   r   rd   CancelledErrorTimeoutErrorr   rW   r   )r%   r   _r   r   r   r@     s    

zDataQueue.readc                 C   r=   r$   )r   r@   r*   r   r   r   r+     r'   zDataQueue.__aiter__r   r   )r   r   r   r   rd   r   r&   rH   r   r;   r   r   r   r   ru   r   r   r   r   r   r@   r   r+   r   r   r   r   r     s&    

r   c                       s^   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ddZ  ZS )FlowControlDataQueuezFlowControlDataQueue resumes and pauses an underlying stream.

    It is a destination for parsed data.

    This class is deprecated and will be removed in version 4.0.
    r_   r`   r^   r"   Nc                   s(   t  j|d d| _|| _|d | _d S )N)r^   r   ra   )superr&   rO   rI   _limit)r%   r_   r`   r^   rl   r   r   r&     s   zFlowControlDataQueue.__init__r   r   r   c                    sF   t  || |  j|7  _| j| jkr| jjs!| j  d S d S d S r$   )r   r   rO   r   rI   r   r   r%   r   r   r   r   r   r     s
   zFlowControlDataQueue.feed_datac              	      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 rL| j  \}}|  j	|8  _	| j	| j
k rJ| jjrJ| j  |S | jd urT| jtr$   )rR   rT   rU   rN   r   rd   r   r   r   rO   r   rI   r   r   rW   r   r   r   r   r   r@     s&   


zFlowControlDataQueue.readr   )r   r   r   r   r   rH   rd   r   r&   r   r   r@   __classcell__r   r   r   r   r     s    r   )&rd   rg   r   typingr   r   r   r   r   r   r   r	   r
   base_protocolr   helpersr   r   r   r   r   http_exceptionsr   logr   __all__r   r   r   r   r4   r<   r   r   r   __annotations__r   r   r   r   r   r   <module>   s,   
 ,   hCA