
    T>qj                       d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZmZmZmZ ddlmZmZmZ d	d
lmZ eeeef   ee   eeef   Zeeee ee   ee   f   Z!ee!ee   f   Z" e#       Z$ e#       Z%dddZ&dddZ'ddZ(ddZ)e G d d             Z*e G d d             Z+e G d d             Z,y)    )annotationsN)AsyncIterableIterableIterator)suppress)SEEK_ENDSEEK_SETBytesIO)IOAnyUnioncastfinal   )CURL_READFUNC_PAUSECURLPAUSE_SEND_CONTCurl   )UnrewindableBodyErrorc                D    	 | j                   d   S # t        $ r |cY S w xY wNr   )queue
IndexErrorqdefaults     Y/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/curl_cffi/requests/streams.py_peek_queuer      s)    wwqz     c                D    	 | j                   d   S # t        $ r |cY S w xY wr   )_queuer   r   s     r   _peek_aio_queuer"   #   s)    xx{ r   c                j   ||n| }t        |d      sT|*t        |t              r|j                         |urdS t        S |%t        |t
              rt        |      |urdS t        S y	 t        |d      r|j                         st        |j                         S # t        t        f$ r	 t        cY S w xY w)zLCapture enough state to safely replay a request body after a failed attempt.Nreadseekable)hasattr
isinstancer   	__aiter___BODY_NOT_REWINDABLEr   iterr%   OSErrortellAttributeError)datacontentbodys      r   _capture_body_positionr1   *   s    )7tD4 :dM#B>>+474Q=QQ:dH#=:T14K7KK$4$T]]_Myy{G$ $##$s   (1B B21B2c                    |y |t         u rt        d      	 | j                  |       y # t        t        f$ r}t        d      |d }~ww xY w)Nz0Unable to rewind streamed request body for retry)r)   r   seekr-   r+   )r0   positionexcs      r   _rewind_bodyr6   ;   sY    ''#$VWW		(G$ #>
	s   * A
AA
c                  $    e Zd ZdZdZddZddZy)_IterableReaderzAdapt a sync ``Iterable[bytes]`` to the ``read(size)`` interface that
    libcurl's read callback expects, buffering and slicing chunks to ``size``.)_it_bufc                B    t        |      | _        t               | _        y N)r*   r9   	bytearrayr:   )selfiterables     r   __init__z_IterableReader.__init__O   s    $(N({	    c                    | j                   }|sD	 t        | j                        }t	        |t
        t        t        f      st        d      ||z  }|sDt        |d |       }|d |= |S # t        $ r Y yw xY w)NrA   &request body iterator must yield bytes)	r:   nextr9   StopIterationr'   bytesr=   
memoryview	TypeError)r>   sizebufchunks       r   r$   z_IterableReader.readS   s    iiTXX eeY
%CD HII5LC  c%4j!J ! s   A( (	A43A4N)r?   zIterable[bytes]returnNonerI   intrL   rF   )__name__
__module____qualname____doc__	__slots__r@   r$    rA   r   r8   r8   H   s    R  I+rA   r8   c                  P    e Zd ZdZdZd	dZed
d       Zedd       ZddZ	ddZ
y)_FileReaderzHKeep the starting offset of a file-like upload so libcurl can replay it.)_file_length_startc                   || _         d | _        	 t        |d      r|j                         st        |j                         | _        | j                  `	 |j                  dt               t        d|j                         | j                  z
        | _        	 |j                  | j                         y y # t        t        f$ r
 d | _        Y w xY w# t        t        f$ r Y Kw xY w# t        t        f$ r d | _        d | _        Y y w xY w# 	 |j                  | j                         w # t        t        f$ r d | _        d | _        Y w w xY wxY w)Nr%   r   )rX   rY   r&   r%   r+   r,   rZ   r-   r3   r   max)r>   files     r   r@   z_FileReader.__init__h   s   
#'	tZ(&*iikDK ;;"
(		!X&"1diikDKK&?@(IIdkk* # ( 	DK	 #G, 
 '0 ("&DK#'DL((IIdkk*&0 ("&DK#'DL(sl   7B4 AC C% 4CCC"D !C""D %DDE	
D&%E	&EE	EE	c                    | j                   S r<   )rY   r>   s    r   lengthz_FileReader.length~   s    ||rA   c                N    | j                   d uxr t        | j                  d      S )Nr3   )rZ   r&   rX   r_   s    r   
rewindablez_FileReader.rewindable   s!    {{$&F74::v+FFrA   c                8    | j                   j                  |      S r<   )rX   r$   )r>   rI   s     r   r$   z_FileReader.read   s    zzt$$rA   c                    | j                   st        d      |t        k(  r|t        t        | j
                        z  }| j                  j                  ||      S )Nzrequest body is not seekable)rb   r+   r	   r   rO   rZ   rX   r3   )r>   offsetorigins      r   r3   z_FileReader.seek   sG    899Xd3,,Fzzvv..rA   N)r]   r   rL   rM   )rL   z
int | None)rL   boolrN   )re   rO   rf   rO   rL   rO   )rP   rQ   rR   rS   rT   r@   propertyr`   rb   r$   r3   rU   rA   r   rW   rW   b   sC    R.I(,   G G%/rA   rW   c                  @    e Zd ZdZd	dZd
dZd
dZd
dZd
dZddZ	y)_AsyncIterableReaderzEBridge an async byte iterable to libcurl's synchronous read callback.c                    || _         || _        t        j                  d      | _        t               | _        d| _        d| _        d | _	        d | _
        y )Nr   )maxsizeF)	_iterable_curlasyncioQueuer!   r=   _buffer_done_paused
_exception_task)r>   r?   curls      r   r@   z_AsyncIterableReader.__init__   sE    !
,3MM!,D {
0404
rA   c                T    t        j                  | j                               | _        y r<   )ro   create_task_produceru   r_   s    r   startz_AsyncIterableReader.start   s    ((9
rA   c                   K   | j                   }|y |j                         s|j                          t        t        j
                        5  | d {    d d d        y 7 # 1 sw Y   y xY wwr<   )ru   donecancelr   ro   CancelledError)r>   tasks     r   closez_AsyncIterableReader.close   s[     zz<yy{KKMg,,- 	JJ	 		 	s0   A	A-A!AA!	A-A!!A*&A-c                  K   | j                   j                         }	 	 	 |j                          d {   }t	        |t
        t        t        f      st        d      |sC| j                  j                  t        |             d {    | j                          7 j# t        $ r Y nw xY w7 &n0# t        j                  $ r  t        $ r}|| _        Y d }~nd }~ww xY wt!        |dd       }	 | |        d {  7   n<# t        j                  $ r  t        $ r}| j                  || _        Y d }~nd }~ww xY wd| _        | j                          y # d| _        | j                          w xY w# t!        |dd       }	 | |        d {  7   n<# t        j                  $ r  t        $ r}| j                  || _        Y d }~nd }~ww xY wd| _        | j                          w # d| _        | j                          w xY wxY ww)NTrC   aclose)rm   r(   	__anext__StopAsyncIterationr'   rF   r=   rG   rH   r!   put_resumero   r~   BaseExceptionrt   getattrrr   )r>   iteratorrK   r5   r   s        r   ry   z_AsyncIterableReader._produce   s    >>++-	"*"4"4"66E "%%J)GH#$LMMkkooeEl333 6)  4  %% 	 	"!DOO	" Xx6F
% (NN))   *??*&)DO* "
 "
 Xx6F
% (NN))   *??*&)DO* "
 "
s  HB2 B  BB  AB2 B/	B2 B   	B,)B2 +B,,B2 1E3 2CCE3 CE3 "H0D <C?=D E D<D72E 7D<<E ?HE00H3HFFFG)G1G	G)	GG)H)HHHc                j    | j                   r'd| _         | j                  j                  t               y y )NF)rs   rn   pauser   r_   s    r   r   z_AsyncIterableReader._resume   s(    << DLJJ01 rA   c                   | j                   }|s	 || j                  j                         z  }t        |d |       }|d |= |S # t        j                  $ r7 | j
                  r| j                  | j                  d Y yd| _        t        cY S w xY w)NrA   T)
rq   r!   
get_nowaitro   
QueueEmptyrr   rt   rs   r   rF   )r>   rI   bufferrK   s       r   r$   z_AsyncIterableReader.read   s    +$++0022 fUdm$5D5M %% +::2"oo47#**+s   A 8B<BBN)r?   zAsyncIterable[bytes]rv   r   rL   rM   )rL   rM   )rI   rO   rL   zbytes | int)
rP   rQ   rR   rS   r@   rz   r   ry   r   r$   rU   rA   r   rj   rj      s$    O5:@2
rA   rj   r<   )r   zqueue.Queue)r   zasyncio.Queue)r.   object | Noner/   r   )r0   r   r4   objectrL   rM   )-
__future__r   ro   r   collections.abcr   r   r   
contextlibr   ior   r	   r
   typingr   r   r   r   r   rv   r   r   r   
exceptionsr   dictstrlisttuplerF   RequestDatar=   SyncRequestContentRequestContentr   
STREAM_ENDr)   r   r"   r1   r6   r8   rW   rj   rU   rA   r   <module>r      s    "   = =  * * . . A A - cNK		 3y"U)Xe_LM )=+??@X
x $"
   2 +/ +/ +/\ L L LrA   