o
    Z�¿j¼  ã                   @  sN  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f  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d„Z&d$d&dd„Z'd'dd„Z(d(dd„Z)eG dd„ dƒƒZ*eG d d!„ d!ƒƒZ+eG d"d#„ d#ƒƒZ,dS ))é    )ÚannotationsN)ÚAsyncIterableÚIterableÚIterator)Úsuppress)ÚSEEK_ENDÚSEEK_SETÚBytesIO)ÚIOÚAnyÚUnionÚcastÚfinalé   )ÚCURL_READFUNC_PAUSEÚCURLPAUSE_SEND_CONTÚCurlé   )ÚUnrewindableBodyErrorÚqúqueue.Queuec                 C  ó$   z| j d W S  ty   | Y S w ©Nr   )ÚqueueÚ
IndexError©r   Údefault© r   úU/home/dinkstrade/pdmp/venv/lib/python3.10/site-packages/curl_cffi/requests/streams.pyÚ_peek_queue   ó
   ÿr   úasyncio.Queuec                 C  r   r   )Ú_queuer   r   r   r   r   Ú_peek_aio_queue#   r    r#   Údataúobject | NoneÚcontentc              	   C  s¦   |dur|n| }t |dƒs5|dur t|tƒr | ¡ |urdS tS |dur3t|tƒr3t|ƒ|ur1dS tS dS zt |dƒrA| ¡ sAt‚| 	¡ W S  t
tfyR   t Y S 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)r$   r&   Úbodyr   r   r   Ú_capture_body_position*   s   

ÿr2   r1   ÚpositionÚobjectÚreturnÚNonec              
   C  sT   |d u rd S |t u rtdƒ‚z|  |¡ W d S  ttfy) } ztdƒ|‚d }~ww )Nz0Unable to rewind streamed request body for retry)r,   r   Úseekr0   r.   )r1   r3   Úexcr   r   r   Ú_rewind_body;   s   ÿþ€ÿr9   c                   @  s(   e Zd ZdZdZddd„Zddd„ZdS )Ú_IterableReaderz”Adapt a sync ``Iterable[bytes]`` to the ``read(size)`` interface that
    libcurl's read callback expects, buffering and slicing chunks to ``size``.)Ú_itÚ_bufÚiterableúIterable[bytes]r5   r6   c                 C  s   t |ƒ| _tƒ | _d S ©N)r-   r;   Ú	bytearrayr<   )Úselfr=   r   r   r   Ú__init__O   s   
z_IterableReader.__init__ÚsizeÚintÚbytesc                 C  sp   | j }|s)zt| jƒ}W n
 ty   Y dS w t|tttfƒs#tdƒ‚||7 }|rt|d |… ƒ}|d |…= |S )Nó    ú&request body iterator must yield bytes)	r<   Únextr;   ÚStopIterationr*   rE   r@   Ú
memoryviewÚ	TypeError)rA   rC   ÚbufÚchunkr   r   r   r'   S   s   ÿù
z_IterableReader.readN)r=   r>   r5   r6   ©rC   rD   r5   rE   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rB   r'   r   r   r   r   r:   H   s
    
r:   c                   @  sN   e Zd ZdZdZddd„Zedd
d„ƒZeddd„ƒZddd„Z	ddd„Z
dS )Ú_FileReaderzHKeep the starting offset of a file-like upload so libcurl can replay it.)Ú_fileÚ_lengthÚ_startÚfiler   r5   r6   c                 C  s
  || _ d | _zt|dƒr| ¡ st‚| ¡ | _W n ttfy&   d | _Y nw | jd urƒz<z| dt	¡ t
d| ¡ | j ƒ| _W n ttfyK   Y nw W z	| | j¡ W d S  ttfyh   d | _d | _Y d S w z| | j¡ W w  ttfy‚   d | _d | _Y w w d S )Nr(   r   )rU   rV   r)   r(   r.   r/   rW   r0   r7   r   Úmax)rA   rX   r   r   r   rB   h   s<   
ÿ
ÿ€þþ
þ÷z_FileReader.__init__ú
int | Nonec                 C  s   | j S r?   )rV   ©rA   r   r   r   Úlength~   s   z_FileReader.lengthÚboolc                 C  s   | j d uo
t| jdƒS )Nr7   )rW   r)   rU   r[   r   r   r   Ú
rewindable‚   s   z_FileReader.rewindablerC   rD   rE   c                 C  s   | j  |¡S r?   )rU   r'   )rA   rC   r   r   r   r'   †   s   z_FileReader.readÚoffsetÚoriginc                 C  s4   | j stdƒ‚|tkr|tt| jƒ7 }| j ||¡S )Nzrequest body is not seekable)r^   r.   r   r   rD   rW   rU   r7   )rA   r_   r`   r   r   r   r7   ‰   s
   z_FileReader.seekN)rX   r   r5   r6   )r5   rZ   )r5   r]   rN   )r_   rD   r`   rD   r5   rD   )rO   rP   rQ   rR   rS   rB   Úpropertyr\   r^   r'   r7   r   r   r   r   rT   b   s    

rT   c                   @  sL   e Zd ZdZddd	„Zdd
d„Zddd„Zddd„Zddd„Zddd„Z	dS )Ú_AsyncIterableReaderzEBridge an async byte iterable to libcurl's synchronous read callback.r=   úAsyncIterable[bytes]Úcurlr   r5   r6   c                 C  s>   || _ || _tjdd�| _tƒ | _d| _d| _d | _	d | _
d S )Nr   )ÚmaxsizeF)Ú	_iterableÚ_curlÚasyncioÚQueuer"   r@   Ú_bufferÚ_doneÚ_pausedÚ
_exceptionÚ_task)rA   r=   rd   r   r   r   rB   •   s   
z_AsyncIterableReader.__init__c                 C  s   t  |  ¡ ¡| _d S r?   )rh   Úcreate_taskÚ_producern   r[   r   r   r   ÚstartŸ   s   z_AsyncIterableReader.startc                 Ã  s^   �| j }|d u r
d S | ¡ s| ¡  ttjƒ� |I d H  W d   ƒ d S 1 s(w   Y  d S r?   )rn   ÚdoneÚcancelr   rh   ÚCancelledError)rA   Útaskr   r   r   Úclose¢   s   €"ÿz_AsyncIterableReader.closec                 Ã  sú  �| j  ¡ }z¦z5	 z	| ¡ I d H }W n	 ty   Y n w t|tttfƒs(tdƒ‚|s+q| j	 
t|ƒ¡I d H  |  ¡  q	W n tjyE   ‚  tyY } z	|| _W Y d }~nd }~ww W t|dd ƒ}zCz|d urm|ƒ I d H  W n" tjyw   ‚  ty� } z| jd u r†|| _W Y d }~nd }~ww W d| _|  ¡  d S W d| _|  ¡  d S d| _|  ¡  w t|dd ƒ}zAz|d ur¿|ƒ I d H  W n" tjyÉ   ‚  tyâ } z| jd u rØ|| _W Y d }~nd }~ww W d| _|  ¡  w W d| _|  ¡  w d| _|  ¡  w )NTrG   Úaclose)rf   r+   Ú	__anext__ÚStopAsyncIterationr*   rE   r@   rJ   rK   r"   ÚputÚ_resumerh   rt   ÚBaseExceptionrm   Úgetattrrk   )rA   ÚiteratorrM   r8   rw   r   r   r   rp   «   s€   €
ÿö€ÿ€€
€þ€€ÿÿ
õ€
€þ€
€ÿ
ÿ
z_AsyncIterableReader._producec                 C  s    | j rd| _ | j t¡ d S d S )NF)rl   rg   Úpauser   r[   r   r   r   r{   Ë   s   þz_AsyncIterableReader._resumerC   rD   úbytes | intc                 C  sx   | j }|s-z	|| j ¡ 7 }W n tjy,   | jr%| jd ur"| jd ‚Y dS d| _t Y S w t	|d |… ƒ}|d |…= |S )NrF   T)
rj   r"   Ú
get_nowaitrh   Ú
QueueEmptyrk   rm   rl   r   rE   )rA   rC   ÚbufferrM   r   r   r   r'   Ð   s   
ú
z_AsyncIterableReader.readN)r=   rc   rd   r   r5   r6   )r5   r6   )rC   rD   r5   r€   )
rO   rP   rQ   rR   rB   rq   rv   rp   r{   r'   r   r   r   r   rb   ‘   s    




	
 rb   r?   )r   r   )r   r!   )r$   r%   r&   r%   )r1   r%   r3   r4   r5   r6   )-Ú
__future__r   rh   r   Úcollections.abcr   r   r   Ú
contextlibr   Úior   r   r	   Útypingr
   r   r   r   r   rd   r   r   r   Ú
exceptionsr   ÚdictÚstrÚlistÚtuplerE   ÚRequestDatar@   ÚSyncRequestContentÚRequestContentr4   Ú
STREAM_ENDr,   r   r#   r2   r9   r:   rT   rb   r   r   r   r   Ú<module>   s>    
üÿ

.