
    `edQ                        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
e          Z G d dee                   Z G d d          Z G d d          Z G d de          Z G d de          Z e            Zee         e d<    G d dee                   Z! G 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                       e Zd ZdZdS )r   zeof stream indication.N)__name__
__module____qualname____doc__     /lib/python3.11/site-packages/aiohttp/streams.pyr   r      s            r   r   c                   N    e Zd Zdeg ee         f         ddfdZddZdefdZdS )	AsyncStreamIterator	read_funcreturnNc                     || _         d S N)r#   )selfr#   s     r    __init__zAsyncStreamIterator.__init__$   s    "r   AsyncStreamIterator[_T]c                     | S r&   r   r'   s    r    	__aiter__zAsyncStreamIterator.__aiter__'       r   c                    K   	 |                                   d {V }n# t          $ r t          w xY w|dk    rt          |S Nr   )r#   r   StopAsyncIterationr'   rvs     r    	__anext__zAsyncStreamIterator.__anext__*   sc      	%~~''''''''BB 	% 	% 	%$$	%99$$	s    1)r$   r)   )	r   r   r   r   r   r   r(   r,   r3   r   r   r    r"   r"   #   ss        #(2y}+<"= #$ # # # #         r   r"   c                   :    e Zd ZddZd	dZdeeef         fdZdS )
ChunkTupleAsyncStreamIteratorstreamr   r$   Nc                     || _         d S r&   )_stream)r'   r6   s     r    r(   z&ChunkTupleAsyncStreamIterator.__init__5   s    r   c                     | S r&   r   r+   s    r    r,   z'ChunkTupleAsyncStreamIterator.__aiter__8   r-   r   c                 b   K   | j                                          d {V }|dk    rt          |S )Nr   F)r8   	readchunkr0   r1   s     r    r3   z'ChunkTupleAsyncStreamIterator.__anext__;   sA      <))++++++++$$	r   )r6   r   r$   N)r$   r5   )	r   r   r   r(   r,   r
   bytesboolr3   r   r   r    r5   r5   4   s`              ud{!3      r   r5   c                   f    e Zd Zdee         fdZdedee         fdZdee         fdZde	fdZ
dS )AsyncStreamReaderMixinr$   c                 *    t          | j                  S r&   )r"   readliner+   s    r    r,   z AsyncStreamReaderMixin.__aiter__C   s    "4=111r   nc                 ,     t           fd          S )z>Returns an asynchronous iterator that yields chunks of size n.c                  .                                    S r&   )read)rC   r'   s   r    <lambda>z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>H   s    499Q<< r   )r"   r'   rC   s   ``r    iter_chunkedz#AsyncStreamReaderMixin.iter_chunkedF   s    "#7#7#7#7#7888r   c                 *    t          | j                  S )z3Yield all available data as soon as it is received.)r"   readanyr+   s    r    iter_anyzAsyncStreamReaderMixin.iter_anyJ   s    "4<000r   c                      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.
        )r5   r+   s    r    iter_chunksz"AsyncStreamReaderMixin.iter_chunksN   s     -T222r   N)r   r   r   r"   r=   r,   intrI   rL   r5   rN   r   r   r    r@   r@   B   s        2.u5 2 2 2 29c 9&9%&@ 9 9 9 91-e4 1 1 1 13: 3 3 3 3 3 3r   r@   c                      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
Zd	efdZd	eeef         fdZd	ee         fdZded	dfdZdeg df         d	dfdZd+dZd	efdZd	efdZd+dZded	dfdZd,deded	dfdZd+dZd+dZded	dfdZd	efdZ d-d ed	efd!Z!d.d#ed	efd$Z"d	efd%Z#d	eeef         fd&Z$d#ed	efd'Z%d.d#ed	efd(Z&d#ed	efd)Z'd#ed	efd*Z(dS )/r   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limitrQ   rR   r$   c                J   || _         || _        |dz  | _        |t          j                    }|| _        d| _        d| _        d | _        t          j
                    | _        d| _        d| _        d | _        d | _        d | _        |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'   rS   rT   rQ   rR   s        r    r(   zStreamReader.__init__g   s     " 19<)++D

7;%0%6%8%8	7;;?37%*]ikkk8:r   c                    | j         j        g}| j        r|                    d| j        z             | j        r|                    d           | j        dk    r$|                    d| j        | j        fz             | j        r|                    d| j        z             | j        r|                    d| j        z             dd	                    |          z  S )	Nz%d byteseofi   zlow=%d high=%dzw=%rze=%r<%s> )
	__class__r   r]   appendrd   rX   rY   re   rg   join)r'   infos     r    __repr__zStreamReader.__repr__   s    '(: 	1KK
TZ/0009 	KK?e##KK(DOT=M+NNOOO< 	/KK-...? 	2KK0111&&r   c                     | j         | j        fS r&   )rX   rY   r+   s    r    get_read_buffer_limitsz#StreamReader.get_read_buffer_limits   s    !122r   c                     | j         S r&   rg   r+   s    r    	exceptionzStreamReader.exception   
    r   excc                     || _         | j                                         | j        }|d | _        t	          ||           | j        }|d | _        t	          ||           d S d S r&   )rg   ri   clearre   r   rf   r'   ry   waiters      r    r   zStreamReader.set_exception   sv    !!###DL&#&&&!#D&#&&&&& r   callbackc                     | j         r2	  |             d S # t          $ r t          j        d           Y d S w xY w| j                            |           d S NException in eof callback)rd   	Exceptionr   rw   ri   ro   r'   r~   s     r    on_eofzStreamReader.on_eof   sz    9 	1G




 G G G)*EFFFFFFG &&x00000s   
 77c                 8   d| _         | j        }|d | _        t          |d            | j        }|d | _        t          |d            | j        D ]1}	  |             # t
          $ r t          j        d           Y .w xY w| j                                         d S )NTr   )	rd   re   r   rf   ri   r   r   rw   r{   )r'   r}   cbs      r    feed_eofzStreamReader.feed_eof   s    	DLvt$$$!#Dvt$$$% 	G 	GBG G G G)*EFFFFFG 	!!#####s   
AA>=A>c                     | j         S )z&Return True if  'feed_eof' was called.rd   r+   s    r    is_eofzStreamReader.is_eof   s
    yr   c                      | j         o| j         S )z=Return True if the buffer is empty and 'feed_eof' was called.rd   rb   r+   s    r    at_eofzStreamReader.at_eof   s    y---r   c                    K   | j         rd S | j        J | j                                        | _        	 | j         d {V  d | _        d S # d | _        w xY wr&   )rd   rf   r\   create_futurer+   s    r    wait_eofzStreamReader.wait_eof   s|      9 	F''':3355	$""""""""#DtD####s   A
 
	Adatac                 \   t          j        dt          d           |sdS | j        r)| j        d         | j        d         | j        d<   d| _        | xj        t          |          z  c_        | xj        t          |          z  c_        | 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)rV   )
stacklevelNr   )
warningswarnDeprecationWarningrc   rb   r]   lenr^   
appendleft_eof_counter)r'   r   s     r    unread_datazStreamReader.unread_data   s    =		
 	
 	
 	
  	F 	$"l1od.A.C.CDDLO"#D

c$ii

D		!%%%r   sizec                    | j         r
J d            |sd S | xj        t          |          z  c_        | j                            |           | xj        t          |          z  c_        | j        }|d | _        t          |d            | j        | j        k    r'| j	        j
        s| j	                                         d S d S d S )Nzfeed_data after feed_eof)rd   r]   r   rb   ro   total_bytesre   r   rY   rW   _reading_pausedpause_readingr'   r   r   r}   s       r    	feed_datazStreamReader.feed_data   s    9888888 	F

c$ii

D!!!CII%DLvt$$$:(((1O(N((***** )(((r   c                 R    | j         | j        rt          d          g | _         d S d S )Nz?Called begin_http_chunk_receiving whensome data was already fed)r_   r   RuntimeErrorr+   s    r    begin_http_chunk_receivingz'StreamReader.begin_http_chunk_receiving   sC    "* "X   ')D### +*r   c                     | j         t          d          | j         r| j         d         nd}| j        |k    rd S | j                             | j                   | j        }|d | _        t          |d            d S d S )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )r_   r   r   ro   re   r   )r'   posr}   s      r    end_http_chunk_receivingz%StreamReader.end_http_chunk_receiving  s    "*.   .2-DKd%b))!s"" F&&t'7888 DLvt$$$$$ r   	func_namec                    K   | j         t          d|z            | j                                        x}| _         	 | j        5  | d {V  d d d            n# 1 swxY w Y   d | _         d S # d | _         w xY w)NzH%s() called while another coroutine is already waiting for incoming data)re   r   r\   r   rh   )r'   r   r}   s      r    _waitzStreamReader._wait   s      
 <#46?@  
 !%
 8 8 : ::	                   DLLL4DLs/   A- 	AA- AA-  A!A- -	A6c                 :   K   |                                   d {V S r&   )	readuntilr+   s    r    rB   zStreamReader.readline2  s(      ^^%%%%%%%%%r      
	separatorc                   K   t          |          }|dk    rt          d          | j        | j        d}d}d}|r| j        r|r| j        }| j        d                             ||          dz   }|                     |r||z
  |z   dz
  nd          }||z  }|t          |          z  }|rd}|| j        k    rt          d          | j        r|| j        rn|r| 	                    d	           d {V  ||S )
Nr   z,Separator should be at least one-byte stringr   Tr   r   FzChunk too bigr   )
r   
ValueErrorrg   rb   rc   find_read_nowait_chunkrY   rd   r   )	r'   r   seplenchunk
chunk_size
not_enoughoffseticharr   s	            r    r   zStreamReader.readuntil5  s\     YQ;;KLLL?&/!

 	., 6: 6,Q,,Y??!C..38@EFNV+a//b  c$ii'
 '!&J 000$_555 , 6: 6 y  .jj---------)  	., r   r   rC   c                   K   | j         | j         	 | j        rA| j        s:t          | dd          dz   | _        | j        dk    rt          j        dd           |sdS |dk     rKg }	 |                                  d {V }|sn|                    |           3d	                    |          S | j        s0| j        s)| 
                    d	           d {V  | j        s| j        )|                     |          S )
NTr   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.)
stack_infor   rF   )rg   rd   rb   getattrr   r   warningrK   ro   rp   r   _read_nowait)r'   rC   blocksblocks       r    rF   zStreamReader.readY  sT     ?&/!	y  $+D.!$D$Dq$H!$q((#+2#'     	3q55
 F%"llnn,,,,,, e$$$	%
 88F###
 , 	%ty 	%**V$$$$$$$$$ , 	%ty 	%   ###r   c                    K   | j         | j         | j        s0| j        s)|                     d           d {V  | j        s| j        )|                     d          S )NrK   r   )rg   rb   rd   r   r   r+   s    r    rK   zStreamReader.readany  sz      ?&/!
 , 	(ty 	(**Y''''''''' , 	(ty 	(   $$$r   c                   K   	 | j         | j         | j        rl| j                            d          }|| j        k    rdS || j        k    r|                     || j        z
            dfS t          j        d           | j        l| j        r|                     d          dfS | j	        rdS | 
                    d	           d{V  )
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   Fr;   r<   )rg   r_   popr^   r   r   r   rb   r   rd   r   )r'   r   s     r    r<   zStreamReader.readchunk  s     	**o%) 	-11!44$,&&&;%% --cDL.@AA4HH'8   ) 	 | <//33U;; y $ $|**[)))))))))1	*r   c                 d  K   | j         | j         g }|dk    r|                     |           d {V }|s:d                    |          }t          j        |t          |          |z             |                    |           |t          |          z  }|dk    d                    |          S )Nr   r   )rg   rF   rp   rZ   IncompleteReadErrorr   ro   )r'   rC   r   r   partials        r    readexactlyzStreamReader.readexactly  s      ?&/! !ee))A,,&&&&&&E M((6**1'3w<<!;KLLLMM%   UOA !ee xxr   c                     | j         | j         | j        r(| j                                        st          d          |                     |          S )Nz9Called while some coroutine is waiting for incoming data.)rg   re   doner   r   rH   s     r    read_nowaitzStreamReader.read_nowait  s^    
 ?&/!< 	 1 1 3 3 	K     ###r   c                    | j         d         }| j        }|dk    r4t          |          |z
  |k    r||||z            }| xj        |z  c_        nF|r+| j                                          ||d          }d| _        n| j                                         }| xj        t          |          z  c_        | xj        t          |          z  c_        | j        }|r9|d         | j        k     r(|                    d           |r|d         | j        k     (| j        | j        k     r%| j	        j
        r| j	                                         |S )Nr   r   )rb   rc   r   popleftr]   r^   r_   r   rX   rW   r   resume_reading)r'   rC   first_bufferr   r   chunk_splitss         r    r   zStreamReader._read_nowait_chunk  sW   |A$77s<((61A55! 34D1$ 	*L  """(D"#D <''))D

c$ii

D		!. 	 |A==Q  	 |A== :''DN,J'N))+++r   c                    | j                                          g }| j        rP|                     |          }|                    |           |dk    r|t          |          z  }|dk    rn| j        P|rd                    |          ndS )z6Read not more than n bytes, or whole buffer if n == -1r   r   r   )rh   assert_timeoutrb   r   ro   r   rp   )r'   rC   chunksr   s       r    r   zStreamReader._read_nowait  s    ""$$$l 	++A..EMM%   BwwSZZ66 l 	 $*2sxxs2r   r$   Nr   )r   r   ))r   r   r   r   r   r   rO   r	   r   rZ   AbstractEventLoopr(   strrr   r
   rt   BaseExceptionrw   r   r   r   r   r>   r   r   r   r=   r   r   r   r   r   rB   r   rF   rK   r<   r   r   r   r   r   r   r    r   r   W   sd         K -148; ; ;; ;
 (); w01; 
; ; ; ;4'# ' ' ' '3c3h 3 3 3 38M2    ' '4 ' ' ' '1xD1 1d 1 1 1 1$ $ $ $*    . . . . .	$ 	$ 	$ 	$ $    (+ +e +3 +t + + + +$) ) ) )% % % %< S  T        $& & & & &" " "5 " " " "H($ ($C ($ ($ ($ ($ ($T
%u 
% 
% 
% 
% *ud{!3  *  *  *  *D 3  5        $ $S $% $ $ $ $C E    63c 3e 3 3 3 3 3 3r   r   c                      e Zd ZddZdefdZdee         fdZdeddfdZ	de
g df         ddfd	Zdd
ZdefdZdefdZddZddededdfdZdefdZddedefdZdefdZdeeef         fdZdedefdZddedefdZdS )EmptyStreamReaderr$   Nc                     d| _         d S )NF_read_eof_chunkr+   s    r    r(   zEmptyStreamReader.__init__  s    $r   c                      d| j         j        z  S )Nrl   )rn   r   r+   s    r    rr   zEmptyStreamReader.__repr__  s    ///r   c                     d S r&   r   r+   s    r    rw   zEmptyStreamReader.exception      tr   ry   c                     d S r&   r   )r'   ry   s     r    r   zEmptyStreamReader.set_exception      r   r~   c                 f    	  |             d S # t           $ r t          j        d           Y d S w xY wr   )r   r   rw   r   s     r    r   zEmptyStreamReader.on_eof  sQ    	CHJJJJJ 	C 	C 	C%&ABBBBBB	Cs   
 00c                     d S r&   r   r+   s    r    r   zEmptyStreamReader.feed_eof  r   r   c                     dS NTr   r+   s    r    r   zEmptyStreamReader.is_eof  r   r   c                     dS r   r   r+   s    r    r   zEmptyStreamReader.at_eof  r   r   c                 
   K   d S r&   r   r+   s    r    r   zEmptyStreamReader.wait_eof  s      r   r   r   rC   c                     d S r&   r   )r'   r   rC   s      r    r   zEmptyStreamReader.feed_data  r   r   c                 
   K   dS r/   r   r+   s    r    rB   zEmptyStreamReader.readline        sr   r   c                 
   K   dS r/   r   rH   s     r    rF   zEmptyStreamReader.read  r   r   c                 
   K   dS r/   r   r+   s    r    rK   zEmptyStreamReader.readany$  r   r   c                 *   K   | j         s	d| _         dS dS )NTr;   r   r   r+   s    r    r<   zEmptyStreamReader.readchunk'  s#      # 	 #'D <{r   c                 0   K   t          j        d|          r/   )rZ   r   rH   s     r    r   zEmptyStreamReader.readexactly.  s      )#q111r   c                     dS r/   r   rH   s     r    r   zEmptyStreamReader.read_nowait1  s    sr   r   r   r   )r   r   r   r(   r   rr   r	   r   rw   r   r   r   r   r>   r   r   r   r=   rO   r   rB   rF   rK   r
   r<   r   r   r   r   r    r   r     s       % % % %0# 0 0 0 08M2     4    CxD1 Cd C C C C               e  D         C     
u    ud{!3    23 25 2 2 2 2 S %      r   r   r   c                       e Zd ZdZdej        ddfdZdefdZde	fdZ
de	fdZdee         fd	Zd
eddfdZddededdfdZddZdefdZdee         fdZdS )r   z>DataQueue is a general-purpose blocking queue with one reader.rR   r$   Nc                 |    || _         d| _        d | _        d | _        d| _        t          j                    | _        d S )NFr   )r\   rd   re   rg   r]   r`   ra   rb   )r'   rR   s     r    r(   zDataQueue.__init__;  s9    
	7;37
.9.?.A.Ar   c                 *    t          | j                  S r&   )r   rb   r+   s    r    __len__zDataQueue.__len__C  s    4<   r   c                     | j         S r&   r   r+   s    r    r   zDataQueue.is_eofF  s
    yr   c                      | j         o| j         S r&   r   r+   s    r    r   zDataQueue.at_eofI  s    y---r   c                     | j         S r&   rv   r+   s    r    rw   zDataQueue.exceptionL  rx   r   ry   c                 f    d| _         || _        | j        }|d | _        t          ||           d S d S r   )rd   rg   re   r   r|   s      r    r   zDataQueue.set_exceptionO  sB    	DL&#&&&&& r   r   r   r   c                     | xj         |z  c_         | j                            ||f           | j        }|d | _        t	          |d            d S d S r&   )r]   rb   ro   re   r   r   s       r    r   zDataQueue.feed_dataX  s^    

d

T4L)))DLvt$$$$$ r   c                 X    d| _         | j        }|d | _        t          |d            d S d S r   )rd   re   r   )r'   r}   s     r    r   zDataQueue.feed_eofa  s;    	DLvt$$$$$ r   c                 p  K   | j         sd| j        s]| j        rJ | j                                        | _        	 | j         d {V  n'# t
          j        t
          j        f$ r	 d | _         w xY w| j         r.| j                                         \  }}| xj	        |z  c_	        |S | j
        | j
        t          r&   )rb   rd   re   r\   r   rZ   CancelledErrorTimeoutErrorr   r]   rg   r   )r'   r   r   s      r    rF   zDataQueue.readi  s      | 	DI 	|###:3355DLl""""""""*G,@A   # < 	 --//JD$JJ$JJK*o%s   A $A+c                 *    t          | j                  S r&   )r"   rF   r+   s    r    r,   zDataQueue.__aiter__}  s    "49---r   r   r   )r   r   r   r   rZ   r   r(   rO   r   r>   r   r   r	   r   rw   r   r   r   r   rF   r"   r,   r   r   r    r   r   8  sV       HHBW6 B4 B B B B! ! ! ! !    . . . . .8M2    ' '4 ' ' ' '% %b % %D % % % %% % % % B        (..r2 . . . . . .r   r   c                   h     e Zd ZdZdededej        ddf fdZdd	e	d
eddf fdZ
de	f fdZ xZS )r   zlFlowControlDataQueue resumes and pauses an underlying stream.

    It is a destination for parsed data.
    rS   rT   rR   r$   Nc                n    t                                          |           || _        |dz  | _        d S )N)rR   rV   )superr(   rW   _limit)r'   rS   rT   rR   rn   s       r    r(   zFlowControlDataQueue.__init__  s6     	d###!air   r   r   r   c                     t                                          ||           | j        | j        k    r'| j        j        s| j                                         d S d S d S r&   )r  r   r]   r  rW   r   r   )r'   r   r   rn   s      r    r   zFlowControlDataQueue.feed_data  s^    $%%%:##DN,J#N((***** $###r   c                 >  K   	 t                                                       d {V 	 | j        | j        k     r&| j        j        r| j                                         S S S # | j        | j        k     r&| j        j        r| j                                         w w w xY wr&   )r  rF   r]   r  rW   r   r   )r'   rn   s    r    rF   zFlowControlDataQueue.read  s      	0'''''''zDK''DN,J'--//// ('tzDK''DN,J'--//// ('s   %A# #9Br   )r   r   r   r   r   rO   rZ   r   r(   r   r   rF   __classcell__)rn   s   @r    r   r     s         
 $ -0 ;B;T 	           + +b + +D + + + + + +0B 0 0 0 0 0 0 0 0 0 0r   r   )#rZ   r`   r   typingr   r   r   r   r   r   r	   r
   r   base_protocolr   helpersr   r   r   r   logr   __all__r   r   r   r"   r5   r@   r   r   r   __annotations__r   r   r   r   r    <module>r     s        
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ( ' ' ' ' ' K K K K K K K K K K K K             WT]]! ! ! ! !	 ! ! !    '"+   "       3 3 3 3 3 3 3 3*`3 `3 `3 `3 `3) `3 `3 `3F8 8 8 8 8 8 8 8v &7%6%8%8u\" 8 8 8F. F. F. F. F. F. F. F.R0 0 0 0 09R= 0 0 0 0 0r   