
    3CfR                     n   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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#y)    N)		AwaitableCallableDequeFinalGenericListOptionalTupleTypeVar   )BaseProtocol)_EXC_SENTINELBaseTimerContext	TimerNoopset_exception
set_result)internal_logger)EMPTY_PAYLOAD	EofStreamStreamReader	DataQueueFlowControlDataQueue_Tc                       e Zd ZdZy)r   zeof stream indication.N)__name__
__module____qualname____doc__     O/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/streams.pyr   r   %   s     r    r   c                   @    e Zd Zdeg ee   f   ddfdZddZdefdZy)AsyncStreamIterator	read_funcreturnNc                     || _         y N)r$   )selfr$   s     r!   __init__zAsyncStreamIterator.__init__*   s	    "r    c                     | S r'   r   r(   s    r!   	__aiter__zAsyncStreamIterator.__aiter__-       r    c                    K   	 | j                          d {   }|dk(  rt        |S 7 # t        $ r t        w xY wwNr    )r$   r   StopAsyncIterationr(   rvs     r!   	__anext__zAsyncStreamIterator.__anext__0   sG     	%~~''B 9$$	 ( 	%$$	%s    >+ )+ >+ ;>)r%   zAsyncStreamIterator[_T])	r   r   r   r   r   r   r)   r,   r3   r   r    r!   r#   r#   )   s4    #(2y}+<"= #$ # r    r#   c                   2    e Zd ZddZddZdeeef   fdZy)ChunkTupleAsyncStreamIteratorr%   Nc                     || _         y r'   )_stream)r(   streams     r!   r)   z&ChunkTupleAsyncStreamIterator.__init__;   s	    r    c                     | S r'   r   r+   s    r!   r,   z'ChunkTupleAsyncStreamIterator.__aiter__>   r-   r    c                 l   K   | j                   j                          d {   }|dk(  rt        |S 7 w)Nr    F)r7   	readchunkr0   r1   s     r!   r3   z'ChunkTupleAsyncStreamIterator.__anext__A   s3     <<))++$$	 ,s   424)r8   r   r%   N)r%   r5   )	r   r   r   r)   r,   r
   bytesboolr3   r   r    r!   r5   r5   :   s!    ud{!3 r    r5   c                   R    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
y)AsyncStreamReaderMixinr%   c                 ,    t        | j                        S r'   )r#   readliner+   s    r!   r,   z AsyncStreamReaderMixin.__aiter__I   s    "4==11r    nc                 $     t         fd      S )z>Returns an asynchronous iterator that yields chunks of size n.c                  &    j                         S r'   )read)rC   r(   s   r!   <lambda>z5AsyncStreamReaderMixin.iter_chunked.<locals>.<lambda>N   s    499Q< r    )r#   r(   rC   s   ``r!   iter_chunkedz#AsyncStreamReaderMixin.iter_chunkedL   s    "#788r    c                 ,    t        | j                        S )z3Yield all available data as soon as it is received.)r#   readanyr+   s    r!   iter_anyzAsyncStreamReaderMixin.iter_anyP   s    "4<<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_chunksT   s     -T22r    N)r   r   r   r#   r=   r,   intrI   rL   r5   rN   r   r    r!   r@   r@   H   sL    2.u5 29c 9&9%&@ 91-e4 1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efde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)y).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                D   || _         || _        |dz  | _        |t        j                         }|| _        d| _        d| _        d | _        t        j                         | _        d| _        d| _        d | _        d | _        d | _        |
t#               n|| _        g | _        y )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__m   s     " 19<))+D

7;%0%6%6%8	7;;?37%*]ik8:r    c                     | j                   j                  g}| j                  r|j                  d| j                  z         | j                  r|j                  d       | j
                  dk7  r*|j                  d| j
                  | j                  fz         | j                  r|j                  d| j                  z         | j                  r|j                  d| j                  z         ddj                  |      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    ''(::KK
TZZ/099KK??e#KK(DOOT=M=M+NNO<<KK-.??KK01&&r    c                 2    | j                   | j                  fS r'   )rX   rY   r+   s    r!   get_read_buffer_limitsz#StreamReader.get_read_buffer_limits   s    !1!122r    c                     | j                   S r'   rg   r+   s    r!   	exceptionzStreamReader.exception       r    exc	exc_causec                     || _         | j                  j                          | j                  }|d | _        t	        |||       | j
                  }|d | _        t	        |||       y y r'   )rg   ri   clearre   r   rf   r(   ry   rz   waiters       r!   r   zStreamReader.set_exception   si    
 !!#DL&#y1!!#D&#y1 r    callbackc                     | j                   r		  |        y | j                  j                  |       y # t        $ r t        j                  d       Y y w xY wNException in eof callback)rd   	Exceptionr   rw   ri   ro   r(   r   s     r!   on_eofzStreamReader.on_eof   sL    99G
 &&x0  G))*EFGs   2 AAc                 D   d| _         | j                  }|d | _        t        |d        | j                  }|d | _        t        |d        | j                  D ]
  }	  |         | j                  j                          y # t
        $ r t        j                  d       Y Hw xY w)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BG	G 	!!#  G))*EFGs   A>>BBc                     | j                   S )z&Return True if  'feed_eof' was called.rd   r+   s    r!   is_eofzStreamReader.is_eof   s    yyr    c                 8    | j                   xr | 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    yy---r    c                    K   | j                   ry | j                  J | j                  j                         | _        	 | j                   d {    d | _        y 7 # d | _        w xY wwr'   )rd   rf   r\   create_futurer+   s    r!   wait_eofzStreamReader.wait_eof   sa     99'''::335	$""""#D ##Ds.   ;A(A AA A(A 	A%%A(datac                 v   t        j                  dt        d       |sy| j                  r0| j                  d   | j                  d | j                  d<   d| _        | xj
                  t        |      z  c_        | xj                  t        |      z  c_        | j                  j                  |       d| _	        y)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    =		
 "ll1od.A.A.CDDLLO"#D

c$i
D	!%r    sizec                    | j                   rJ d       |sy | xj                  t        |      z  c_        | j                  j	                  |       | xj
                  t        |      z  c_        | j                  }|d | _        t        |d        | j                  | j                  kD  r2| j                  j                  s| j                  j                          y y y )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    99888}

c$i
D!CI%DLvt$::(((1O1ONN((* 2P(r    c                 Z    | j                   | j                  rt        d      g | _         y y )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  s6    ""*"X  ')D# +r    c                    | j                   t        d      | j                   r| j                   d   nd}| j                  |k(  ry | j                   j                  | j                         | j                  }|d | _        t        |d        y y )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-Dd%%b)!s" &&t'7'78 DLvt$ r    	func_namec                   K   | j                   t        d|z        | j                  j                         x}| _         	 | j                  5  | d {    d d d        d | _         y 7 # 1 sw Y   xY w# d | _         w xY w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 ::	    DL    DLsF   <B A4 A(A&A(A4 B &A((A1-A4 4	A==B c                 >   K   | j                          d {   S 7 wr'   )	readuntilr+   s    r!   rB   zStreamReader.readline<  s     ^^%%%%s   	separatorc                   K   t        |      }|dk(  rt        d      | j                  | j                  d}d}d}|r| j                  r|r| j                  }| j                  d   j                  ||      dz   }| j                  |r||z
  |z   dz
  nd      }||z  }|t        |      z  }|rd}|| j                  kD  rt        d      | j                  r|r| j                  r	 |S |r| j                  d	       d {    |r|S 7 	w)
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.readuntil?  s     YQ;KLL??&//!

,,:,,Q,,Y?!C..38EFNV+a/b c$i'
!&J 0 00$_55 ,,: yy
  jj---) ,  .s   CD	%D	=D>D	D	rC   c                 2  K   | j                   | j                   	 | j                  rG| j                  s;t        | dd      dz   | _        | j                  dkD  rt        j                  dd       |sy|dk  rAg }	 | j                          d {   }|sn|j                  |       -dj                  |      S | j                  s>| j                  s2| j                  d	       d {    | j                  s| j                  s2| j                  |      S 7 7 0w)
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.readc  s    ??&//! yy$+D.!$Dq$H!$$q(#++2#' q5
 F"lln,e$	 
 88F##
 ,,tyy**V$$$ ,,tyy   ## - %s+   BDDAD$D%DDDc                    K   | j                   | j                   | j                  s>| j                  s2| j                  d       d {    | j                  s| j                  s2| j	                  d      S 7 .w)NrK   r   )rg   rb   rd   r   r   r+   s    r!   rK   zStreamReader.readany  sb     ??&//!
 ,,tyy**Y''' ,,tyy   $$ (s   AA8A6A8%A8c                   K   	 | j                   | j                   | j                  r|| j                  j                  d      }|| j                  k(  ry|| j                  kD  r | j	                  || j                  z
        dfS t        j                  d       | j                  r|| j                  r| j                  d      dfS | j                  ry| j                  d	       d{    7 w)
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      *oo%))--11!4$,,&&% --cDLL.@A4HH''8 )) ||//3U;; yy $**[)))1 0 *s   B!C,$A C,$C*%C,c                 T  K   | j                   | j                   g }|dkD  rs| j                  |       d {   }|s3dj                  |      }t        j                  |t        |      |z         |j                  |       |t        |      z  }|dkD  rsdj                  |      S 7 ow)Nr   r    )rg   rF   rp   rZ   IncompleteReadErrorr   ro   )r(   rC   r   r   partials        r!   readexactlyzStreamReader.readexactly  s     ??&//! !e))A,&E((6*11'3w<!;KLLMM% UOA !e xx 's   4B(B&AB(B(c                     | j                   | j                   | j                  r%| j                  j                         st        d      | j	                  |      S )Nz9Called while some coroutine is waiting for incoming data.)rg   re   doner   r   rH   s     r!   read_nowaitzStreamReader.read_nowait  sQ    
 ??&//!<< 1 1 3K    ##r    c                    | j                   d   }| j                  }|dk7  r/t        |      |z
  |kD  r||||z    }| xj                  |z  c_        nC|r'| j                   j                          ||d  }d| _        n| j                   j                         }| xj                  t        |      z  c_        | xj
                  t        |      z  c_        | j                  }|r8|d   | j
                  k  r&|j                  d       |r|d   | j
                  k  r&| j                  | j                  k  r0| j                  j                  r| j                  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  s$   ||A$$7s<(61A5!4D1$LL  "(D"#D <<'')D

c$i
D	!..|A=Q |A= ::'DNN,J,JNN))+r    c                    | j                   j                          g }| j                  rH| j                  |      }|j	                  |       |dk7  r|t        |      z  }|dk(  rn| j                  rH|rdj                  |      S 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  sy    ""$ll++A.EMM% BwSZ6 ll $*sxx2s2r    r%   N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   r   rB   r   rF   rK   r<   r   r   r   r   r   r    r!   r   r   ]   s    K -148;; ;
 (); w001; 
;4'# '3c3h 38M2  $122 !2 
	2$1xD1 1d 1$* . .	$ $ (+e +3 +t +$)%< S  T  $& &" "5 "H($C ($ ($T
%u 
% *ud{!3  *D 3  5  $S $% $C E 63c 3e 3r    r   c                      e Zd ZddZdefdZdee   fdZe	fde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y)EmptyStreamReaderr%   Nc                     d| _         y )NF_read_eof_chunkr+   s    r!   r)   zEmptyStreamReader.__init__  s
    $r    c                 4    d| j                   j                  z  S )Nrl   )rn   r   r+   s    r!   rr   zEmptyStreamReader.__repr__  s    ////r    c                      y r'   r   r+   s    r!   rw   zEmptyStreamReader.exception      r    ry   rz   c                      y r'   r   )r(   ry   rz   s      r!   r   zEmptyStreamReader.set_exception  s    
 	r    r   c                 \    	  |        y # t         $ r t        j                  d       Y y w xY wr   )r   r   rw   r   s     r!   r   zEmptyStreamReader.on_eof  s-    	CJ 	C%%&AB	Cs   
 ++c                      y r'   r   r+   s    r!   r   zEmptyStreamReader.feed_eof      r    c                      yNTr   r+   s    r!   r   zEmptyStreamReader.is_eof  r   r    c                      yr   r   r+   s    r!   r   zEmptyStreamReader.at_eof!  r   r    c                    K   y wr'   r   r+   s    r!   r   zEmptyStreamReader.wait_eof$  s	        r   rC   c                      y r'   r   )r(   r   rC   s      r!   r   zEmptyStreamReader.feed_data'  r   r    c                    K   ywr/   r   r+   s    r!   rB   zEmptyStreamReader.readline*  	     r   c                    K   ywr/   r   rH   s     r!   rF   zEmptyStreamReader.read-  r   r   c                    K   ywr/   r   r+   s    r!   rK   zEmptyStreamReader.readany2  r   r   c                 4   K   | j                   sd| _         yyw)NTr;   r   r   r+   s    r!   r<   zEmptyStreamReader.readchunk5  s     ###'D s   c                 6   K   t        j                  d|      wr/   )rZ   r   rH   s     r!   r   zEmptyStreamReader.readexactly<  s     ))#q11s   c                      yr/   r   rH   s     r!   r   zEmptyStreamReader.read_nowait?  s    r    r   r   r   )r   r   r   r)   r   rr   r	   r   rw   r   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8M2  $1 ! 
	CxD1 Cd C  e  D  C  
u ud{!3 23 25 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efd
e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y)r   z>DataQueue is a general-purpose blocking queue with one reader.rR   r%   Nc                 |    || _         d| _        d | _        d | _        d| _        t        j                         | _        y )NFr   )r\   rd   re   rg   r]   r`   ra   rb   )r(   rR   s     r!   r)   zDataQueue.__init__I  s5    
	7;37
.9.?.?.Ar    c                 ,    t        | j                        S r'   )r   rb   r+   s    r!   __len__zDataQueue.__len__Q  s    4<<  r    c                     | j                   S r'   r   r+   s    r!   r   zDataQueue.is_eofT  s    yyr    c                 8    | j                   xr | j                   S r'   r   r+   s    r!   r   zDataQueue.at_eofW  s    yy---r    c                     | j                   S r'   rv   r+   s    r!   rw   zDataQueue.exceptionZ  rx   r    ry   rz   c                 f    d| _         || _        | j                  }|d | _        t        |||       y y r   )rd   rg   re   r   r}   s       r!   r   zDataQueue.set_exception]  s9    
 	DL&#y1 r    r   r   c                     | xj                   |z  c_         | j                  j                  ||f       | j                  }|d | _        t	        |d        y y r'   )r]   rb   ro   re   r   r   s       r!   r   zDataQueue.feed_dataj  sK    

d
T4L)DLvt$ r    c                 V    d| _         | j                  }|d | _        t        |d        y y r   )rd   re   r   )r(   r~   s     r!   r   zDataQueue.feed_eofs  s.    	DLvt$ r    c                   K   | j                   sN| j                  sB| j                  rJ | j                  j	                         | _        	 | j                   d {    | j                   r4| j                   j                         \  }}| xj                  |z  c_	        |S | j                  | j                  t        7 b# t
        j                  t
        j                  f$ r	 d | _         w xY wwr'   )rb   rd   re   r\   r   rZ   CancelledErrorTimeoutErrorr   r]   rg   r   )r(   r   r   s      r!   rF   zDataQueue.read{  s     ||DII||##::335DLll""
 <<--/JD$JJ$JK*oo% #**G,@,@A #s1   AC,	B= B;B= AC,;B= =,C))C,c                 ,    t        | j                        S r'   )r#   rF   r+   s    r!   r,   zDataQueue.__aiter__  s    "499--r    r   r   )r   r   r   r   rZ   r   r)   rO   r   r>   r   r   r	   r   rw   r   r   r   r   r   rF   r#   r,   r   r    r!   r   r   F  s    HBW66 B4 B! ! . .8M2  $122 !2 
	2%b % %D %% B  (..r2 .r    r   c                   r     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                H    t         |   |       || _        |dz  | _        y )N)rR   rV   )superr)   rW   _limit)r(   rS   rT   rR   rn   s       r!   r)   zFlowControlDataQueue.__init__  s'     	d#!air    r   r   c                     t         |   ||       | j                  | j                  kD  r2| j                  j
                  s| j                  j                          y y y r'   )r  r   r]   r  rW   r   r   )r(   r   r   rn   s      r!   r   zFlowControlDataQueue.feed_data  sG    $%::#DNN,J,JNN((* -K#r    c                 t  K   	 t         |           d {   | j                  | j                  k  r2| j                  j
                  r| j                  j                          S S S 7 O# | j                  | j                  k  r2| j                  j
                  r| j                  j                          w w w xY wwr'   )r  rF   r]   r  rW   r   r   )r(   rn   s    r!   rF   zFlowControlDataQueue.read  s     	0'zzDKK'DNN,J,J--/ -K' (zzDKK'DNN,J,J--/ -K's-   B8A( A&A( AB8&A( (AB55B8r   )r   r   r   r   r   rO   rZ   r   r)   r   r   rF   __classcell__)rn   s   @r!   r   r     s^    
 $ -0 ;B;T;T 	 +b + +D +0B 0 0r    r   )$rZ   r`   r   typingr   r   r   r   r   r   r	   r
   r   base_protocolr   helpersr   r   r   r   r   logr   __all__r   r   r   r#   r5   r@   r   r   r   __annotations__r   r   r   r    r!   <module>r     s      
 
 
 (  ! T]!	 !'"+ " 3 3*d3) d3N< <~ &7%8u\" 8J. J.Z09R= 0r    