o
    m=8j?^                     @   s$  U d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
 ddlmZ ddlmZ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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)FinalGenericTypeVar   )BaseProtocol)_EXC_SENTINELDEFAULT_CHUNK_SIZE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   V/home/nk/hobo-godmode/plappi-mvp/.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__)      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   	__slots__r   r   r   r#   r(   r/   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!   r2   )r"   r4   r   r   r   r#   :   r$   z&ChunkTupleAsyncStreamIterator.__init__c                 C   r&   r!   r   r'   r   r   r   r(   =   r)   z'ChunkTupleAsyncStreamIterator.__aiter__c                    s"   | j  I d H }|dkrt|S )Nr+   F)r3   	readchunkr,   r-   r   r   r   r/   @   s
   z'ChunkTupleAsyncStreamIterator.__anext__)r4   r   r   N)r   r1   )
r   r   r   r0   r#   r(   tuplebytesboolr/   r   r   r   r   r1   6   s
    

r1   c                   @   s\  e Zd ZdZdZddddedededB dej	dB d	df
d
dZ
d	efd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	eeef fddZded	dfddZd	edB 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dUd$d%Zd	efd&d'Zd	efd(d)Z dUd*d+Z!e"d	efd,d-Z#d.ed	dfd/d0Z$dVd.ed2ed	efd3d4Z%dUd5d6Z&dUd7d8Z'd9ed	dfd:d;Z(dd<d=edB d	efd>d?Z)	@dWddAdBedCedB d	efdDdEZ*dXded	efdGdHZ+d	efdIdJZ,d	eeef fdKdLZ-ded	efdMdNZ.dXded	efdOdPZ/ded	efdQdRZ0ded	efdSdTZ1dS )Yr   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limitrN   rO   r   c                C   s   || _ || _|d | _|d u rt }td|d | _| jd | _|| _d| _	d| _
d | _t | _d| _d| _d | _d | _d | _|d u rHt n|| _g | _d| _d| _d | _d S )N         r   F)r:   r;   r<   asyncioget_event_loopmaxr>   r=   r?   r@   rA   rB   collectionsdequerC   rD   rE   rF   rG   rH   r   rI   rJ   rK   rL   rM   )r"   rP   rQ   rN   rO   r   r   r   r#   l   s,   


zStreamReader.__init__c                 C   s   | j jg}| jr|d| j  | jr|d | jtkr(|d| j| jf  | jr3|d| j  | j	r>|d| j	  dd
| S )Nz%d byteseofzlow=%d high=%dzw=%rze=%r<%s> )	__class__r   r@   appendrE   r;   r
   r<   rF   rH   join)r"   infor   r   r   __repr__   s   


zStreamReader.__repr__c                 C   
   t | jS r!   )r   readliner'   r   r   r   r(      r$   zStreamReader.__aiter__nc                    s      t fddS )z>Returns an asynchronous iterator that yields chunks of size n.c                      s
     S r!   )readr   rd   r"   r   r   <lambda>   s   
 z+StreamReader.iter_chunked.<locals>.<lambda>)set_read_chunk_sizer   r"   rd   r   rf   r   iter_chunked   s   
zStreamReader.iter_chunkedc                 C   rb   )z3Yield all available data as soon as it is received.)r   readanyr'   r   r   r   iter_any   s   
zStreamReader.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.
        )r1   r'   r   r   r   iter_chunks   s   zStreamReader.iter_chunksc                 C   s   | j | jfS r!   r;   r<   r'   r   r   r   get_read_buffer_limits      z#StreamReader.get_read_buffer_limitsc                 C   s"   || j kr|| _ |d | _dS dS )z7Raise buffer limits to match the consumer's chunk size.rR   Nrn   ri   r   r   r   rh      s   
z StreamReader.set_read_chunk_sizec                 C      | j S r!   rH   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!   )rH   rJ   clearrF   r   rG   r"   ru   rv   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)rE   	Exceptionr   rs   rJ   r^   r"   rz   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dd | jD ]}z|  W q+ ty@   t	d Y q+w | j
  d S )NTF)resume_parserr|   )rE   rF   r   rG   r:   resume_readingrJ   r}   r   rs   rw   )r"   ry   cbr   r   r   feed_eof   s"   



zStreamReader.feed_eofc                 C   rq   )z&Return True if  'feed_eof' was called.rE   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.rE   rC   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!   )rE   rG   r?   create_futurer'   r   r   r   wait_eof   s   zStreamReader.wait_eofc                 C   s   | j d u r| jS | j S r!   )rM   rL   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)rR   )
stacklevelNr   )
warningswarnDeprecationWarningrD   rC   r@   lenrA   
appendleftrK   )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r=| j	
  dS )Nzfeed_data after feed_eofF)rE   r   r@   rC   r^   rL   rF   r   r<   r:   pause_reading)r"   r   r   data_lenry   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)rB   rL   RuntimeErrorrX   rY   r'   r   r   r   begin_http_chunk_receiving0  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r.| j  | j}|d ur?d | _t	|d  d S d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )
rB   r   rL   r^   r   r>   r:   r   rF   r   )r"   posry   r   r   r   end_http_chunk_receiving8  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)r:   	connectedr   rF   r?   r   rI   )r"   r   ry   r   r   r   _wait\  s"   

zStreamReader._waitmax_line_lengthr   c                   s   | j |dI d H S )Nmax_size)	readuntilr"   r   r   r   r   rc   q  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   
ValueErrorrH   r<   rC   rD   find_read_nowait_chunkr   rE   r   )
r"   r   r   seplenchunk
chunk_size
not_enoughoffseticharr   r   r   r   r   t  s>   



zStreamReader.readuntilr   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 rK| tj	 g }	 | 
 I d H }|s@n|| q6d|S | | | jsd| jsd| d	I d H  | jsd| jrV| |S )
NTrK   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.)
stack_infor+   re   )rH   rE   rC   getattrrK   r   warningrh   sysmaxsizerk   r^   r_   r   _read_nowait)r"   rd   blocksblockr   r   r   re     s8   





zStreamReader.readc                    sD   | j d ur	| j | js| js| dI d H  | js| jr| dS )Nrk   r   )rH   rC   rE   r   r   r'   r   r   r   rk     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   Fr5   r6   )rH   rB   popleftrA   r   r   r   rC   r   rE   r   )r"   r   r   r   r   r6     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+   )rH   re   r_   rU   IncompleteReadErrorr   r^   )r"   rd   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.)rH   rF   doner   r   ri   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k r}| jd u sxt| j| jk r}| j	
  |S )Nr   r   )rC   rD   r   r   r@   rA   rB   r;   r=   r:   r   )r"   rd   first_bufferr   r   r   chunk_splitsr   r   r   r     s,   




zStreamReader._read_nowait_chunkc                    s    j   |dkr%t j}|dkr dS d fddt|D S g } jrB |}|| |t|8 }|dkr?n js*|rId|S dS )z6Read not more than n bytes, or whole buffer if n == -1r   r   r+   c                    s   g | ]}  d qS r   )r   ).0_r'   r   r   
<listcomp>9  s    z-StreamReader._read_nowait.<locals>.<listcomp>r   )rI   assert_timeoutr   rC   r   r_   ranger^   )r"   rd   countchunksr   r   r'   r   r   /  s   




zStreamReader._read_nowaitr   Nr   )r   r   )2r   r   r   r   r0   r   intr   rU   AbstractEventLoopr#   strra   r   r8   r(   rj   rl   r1   rm   r7   ro   rh   BaseExceptionrs   r	   r   r   r   r   r9   r   r   r   propertyr   r   r   r   r   r   rc   r   re   rk   r6   r   r   r   r   r   r   r   r   r   G   s|    
"

	


$
')"r   c                   @   sB  e Zd ZdZd/ddZdefddZdedB 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d0dededefddZdeddfddZdd d!edB defd"d#Zd1d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d1dedefd-d.ZdS )2EmptyStreamReader_read_eof_chunkr   Nc                 C   s   d| _ d| _d S )NFr   )r   rL   r'   r   r   r   r#   J  s   
zEmptyStreamReader.__init__c                 C   s   d| j j S )Nr[   )r]   r   r'   r   r   r   ra   N  rp   zEmptyStreamReader.__repr__c                 C      d S r!   r   r'   r   r   r   rs   Q  r)   zEmptyStreamReader.exceptionru   rv   c                 C   r   r!   r   )r"   ru   rv   r   r   r   r   T  s   zEmptyStreamReader.set_exceptionrz   c                 C   s,   z|  W d S  t y   td Y d S w r{   )r}   r   rs   r~   r   r   r   r   [  s
   zEmptyStreamReader.on_eofc                 C   r   r!   r   r'   r   r   r   r   a  r)   zEmptyStreamReader.feed_eofc                 C      dS NTr   r'   r   r   r   r   d  r)   zEmptyStreamReader.is_eofc                 C   r   r   r   r'   r   r   r   r   g  r)   zEmptyStreamReader.at_eofc                    s   d S r!   r   r'   r   r   r   r   j     zEmptyStreamReader.wait_eofr   r   rd   c                 C   r   NFr   )r"   r   rd   r   r   r   r   m  r)   zEmptyStreamReader.feed_datac                 C   r   r!   r   ri   r   r   r   rh   p  r)   z%EmptyStreamReader.set_read_chunk_sizer   r   c                      dS r*   r   r   r   r   r   rc   s  r   zEmptyStreamReader.readliner   c                    r   r*   r   ri   r   r   r   re   v  r   zEmptyStreamReader.readc                    r   r*   r   r'   r   r   r   rk   {  r   zEmptyStreamReader.readanyc                    s   | j s	d| _ dS dS )NTr5   r   r   r'   r   r   r   r6   ~  s
   zEmptyStreamReader.readchunkc                    s   t d|r*   )rU   r   ri   r   r   r   r     s   zEmptyStreamReader.readexactlyc                 C   r   r*   r   ri   r   r   r   r     r)   zEmptyStreamReader.read_nowaitr   r   r   )r   r   r   r0   r#   r   ra   r   rs   r	   r   r   r   r   r9   r   r   r   r8   r   r   rh   rc   re   rk   r7   r6   r   r   r   r   r   r   r   F  s4    



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dB 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.rO   r   Nc                 C   s&   || _ d| _d | _d | _t | _d S r   )r?   rE   rF   rH   rX   rY   rC   )r"   rO   r   r   r   r#     s
   zDataQueue.__init__c                 C   rb   r!   )r   rC   r'   r   r   r   __len__  r$   zDataQueue.__len__c                 C   rq   r!   r   r'   r   r   r   r     rt   zDataQueue.is_eofc                 C   r   r!   r   r'   r   r   r   r     s   zDataQueue.at_eofc                 C   rq   r!   rr   r'   r   r   r   rs     rt   zDataQueue.exceptionru   rv   c                 C   s4   d| _ || _| j }d urd | _t||| d S d S r   )rE   rH   rF   r   rx   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!   )rC   r^   rF   r   )r"   r   r   ry   r   r   r   r     s
   zDataQueue.feed_datac                 C   s,   d| _ | j }d urd | _t|d  d S d S r   )rE   rF   r   )r"   ry   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!   )rC   rE   rF   r?   r   rU   CancelledErrorTimeoutErrorr   rH   r   )r"   r   r   r   r   r   re     s    

zDataQueue.readc                 C   rb   r!   )r   re   r'   r   r   r   r(     r$   zDataQueue.__aiter__r   r   )r   r   r   r   rU   r   r#   r   r   r9   r   r   r   rs   r	   r   r   r   r   re   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.
    rP   rQ   rO   r   Nc                   s(   t  j|d d| _|| _|d | _d S )N)rO   r   rR   )superr#   r@   r:   _limit)r"   rP   rQ   rO   r]   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   r@   r   r:   _reading_pausedr   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!   )rC   rE   rF   r?   r   rU   r   r   r   r@   r   r:   r   r   rH   r   r   r   r   r   re     s&   


zFlowControlDataQueue.readr   )r   r   r   r   r   r   rU   r   r#   r   r   re   __classcell__r   r   r   r   r     s    r   )$rU   rX   r   r   collections.abcr   r   typingr   r   r   base_protocolr   helpersr	   r
   r   r   r   r   http_exceptionsr   logr   __all__r   r}   r   r   r1   r   r   r   __annotations__r   r   r   r   r   r   <module>   s0   
      FA