o
    h)                      @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZddlmZm	Z	 ddl
mZmZmZmZ ddlmZmZmZmZmZmZmZ deje d	efd
dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)TracebackType   )
PoolLimitsTimeoutConfig)ConnectTimeoutPoolTimeoutReadTimeoutWriteTimeout   )BaseBackgroundManager	BaseEventBasePoolSemaphore	BaseQueueBaseTCPStreamConcurrencyBackendTimeoutFlagvaluereturnc                 C   s   | d ur| S t dS )Ninf)float)r    r   ^/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/httpx/concurrency/trio.py_or_inf   s   r   c                	   @   s   e Zd Zdejejejf deddfddZ	de
fddZ	dd	eded
edefddZdefddZdeddfddZ	ddeded
eddfddZdddZdS )	TCPStreamstreamtimeoutr   Nc                 C   s    || _ || _d| _t | _d S )N    )r   r   write_buffertrioLock
write_lock)selfr   r   r   r   r   __init__   s   zTCPStream.__init__c                 C   s8   t | jtjs	dS | j }|d u rdS |dkrdS dS )NzHTTP/1.1Zh2zHTTP/2)
isinstancer   r   	SSLStreamselected_alpn_protocol)r!   identr   r   r   get_http_version%   s   
zTCPStream.get_http_versionnflagc                    s~   |d u r| j }	 |d u p|j}t|r|jnd}t| | jj|dI d H W  d    S 1 s3w   Y  |r>t d q	)NTg{Gz?)Z	max_bytes)	r   Zraise_on_read_timeoutr   read_timeoutr   move_on_afterr   Zreceive_somer   )r!   r(   r   r)   should_raiser*   r   r   r   read/   s    zTCPStream.readc                 C   s:   | j }t|dr|j}t|dst|tjsJ |j S )Ntransport_stream)r   hasattrr.   r#   r   SocketStreamsocketZis_readable)r!   r   r   r   r   is_connection_droppedA   s   


zTCPStream.is_connection_droppeddatac                 C   s   |  j |7  _ d S N)r   )r!   r3   r   r   r   write_no_blockP   s   zTCPStream.write_no_blockc              
      s   | j r#| j }d| _ z| j|||dI d H  W n ty"   || _ w |s'd S |d u r.| j}t|j}	 t|0 | j	4 I d H  | j
|I d H  W d   I d H  n1 I d H s[w   Y  	 W d    d S 1 slw   Y  |d u pw|j}|r~t d q4)Nr   )r   r)   )r   writer	   Zwriter_bufferr   r   write_timeoutr   r+   r    r   Zsend_allZraise_on_write_timeout)r!   r3   r   r)   Zprevious_datar7   r,   r   r   r   r6   S   s4   
( zTCPStream.writec                       | j  I d H  d S r4   )r   acloser!   r   r   r   closeu      zTCPStream.close)NNr   N)__name__
__module____qualname__typingUnionr   r0   r$   r   r"   strr'   intr   bytesr-   boolr2   r5   r6   r;   r   r   r   r   r      s@    



"r   c                   @   sH   e Zd ZdefddZedejej	 fddZ
ddd	Zdd
dZdS )PoolSemaphorepool_limitsc                 C   s
   || _ d S r4   )rH   )r!   rH   r   r   r   r"   z      
zPoolSemaphore.__init__r   c                 C   s<   t | ds| jj}|d u rd | _| jS tj||d| _| jS )N
_semaphore)Z	max_value)r/   rH   Z
hard_limitrJ   r   	Semaphore)r!   Zmax_connectionsr   r   r   	semaphore}   s   
zPoolSemaphore.semaphoreNc                    s`   | j d u rd S t| jj}t| | j  I d H  	 W d    d S 1 s(w   Y  t r4   )rL   r   rH   pool_timeoutr   r+   acquirer   )r!   r   r   r   r   rN      s   
 zPoolSemaphore.acquirec                 C   s   | j d u rd S | j   d S r4   )rL   releaser:   r   r   r   rO      s   
zPoolSemaphore.releaser=   )r>   r?   r@   r   r"   propertyrA   Optionalr   rK   rL   rN   rO   r   r   r   r   rG   y   s    
rG   c                
   @   s   e Zd Zdededejej de	de
f
ddZdejd	ejd
ejdejfddZdejd	ejd
ejdejfddZdedefddZdedefddZdefddZdejd	ejddfddZdS )TrioBackendhostnameportssl_contextr   r   c                    s   t |j}t|$}t||I d H }|d ur(tj|||d}| I d H  W d    n1 s2w   Y  |jr=t t	||dS )N)server_hostname)r   r   )
r   connect_timeoutr   r+   open_tcp_streamr$   do_handshakeZcancelled_caughtr   r   )r!   rS   rT   rU   r   rW   Zcancel_scoper   r   r   r   rX      s   
zTrioBackend.open_tcp_streamfuncargskwargsc                    s2   t jj|rtj|fi |n|g|R  I d H S r4   )r   Z	to_threadZrun_sync	functoolspartial)r!   rZ   r[   r\   r   r   r   run_in_threadpool   s   zTrioBackend.run_in_threadpool	coroutinec                 O   s(   t j|rtj|fi |n|g|R  S r4   )r   runr]   r^   )r!   r`   r[   r\   r   r   r   ra      s
   zTrioBackend.runlimitsc                 C   s   t |S r4   )rG   )r!   rb   r   r   r   get_semaphore   s   zTrioBackend.get_semaphoremax_sizec                 C   s
   t |dS )N)rd   )Queuer!   rd   r   r   r   create_queue   rI   zTrioBackend.create_queuec                 C   s   t  S r4   )Eventr:   r   r   r   create_event   s   zTrioBackend.create_eventBackgroundManagerc                 G   s   t |g|R  S r4   )rj   r!   r`   r[   r   r   r   background_manager   s   zTrioBackend.background_managerN)r>   r?   r@   rC   rD   rA   rQ   ssl
SSLContextr   r   rX   CallableAnyr_   ra   r   r   rc   r   rg   r   ri   rl   r   r   r   r   rR      sP    



rR   c                   @   sB   e Zd ZdeddfddZdejfddZdejddfd	d
ZdS )re   rd   r   Nc                 C   s   t tj\| _| _d S r4   )r   Zopen_memory_channelmathr   send_channelreceive_channelrf   r   r   r   r"      s   zQueue.__init__c                    s   | j  I d H S r4   )rs   Zreceiver:   r   r   r   get   s   z	Queue.getr   c                    s   | j |I d H  d S r4   )rr   send)r!   r   r   r   r   put   s   z	Queue.put)	r>   r?   r@   rD   r"   rA   rp   rt   rv   r   r   r   r   re      s    re   c                   @   sB   e Zd ZdddZdddZdefddZdd	d
ZdddZdS )rh   r   Nc                 C      t  | _d S r4   r   rh   _eventr:   r   r   r   r"         zEvent.__init__c                 C   s   | j   d S r4   )ry   setr:   r   r   r   r{      rz   z	Event.setc                 C   s
   | j  S r4   )ry   is_setr:   r   r   r   r|      rI   zEvent.is_setc                    r8   r4   )ry   waitr:   r   r   r   r}      r<   z
Event.waitc                 C   rw   r4   rx   r:   r   r   r   clear   s   zEvent.clearr=   )	r>   r?   r@   r"   r{   rF   r|   r}   r~   r   r   r   r   rh      s    


rh   c                	   @   sX   e Zd ZdejdejddfddZdddZ			dd	eje	 d
e	de
ddfddZdS )rj   r`   r[   r   Nc                 G   s    || _ || _t | _d | _d S r4   )r`   r[   r   Zopen_nurserynursery_managernurseryrk   r   r   r   r"      s   

zBackgroundManager.__init__c                    s0   | j  I d H | _| jj| jg| jR   | S r4   )r   
__aenter__r   Z
start_soonr`   r[   r:   r   r   r   r      s   zBackgroundManager.__aenter__exc_type	exc_value	tracebackc                    s*   | j d usJ | j|||I d H  d S r4   )r   r   	__aexit__)r!   r   r   r   r   r   r   r      s   zBackgroundManager.__aexit__)r   rj   )NNN)r>   r?   r@   rA   ro   rp   r"   r   TypeBaseExceptionr   r   r   r   r   r   rj      s    
rj   ) r]   rq   rm   rA   typesr   r   configr   r   
exceptionsr   r   r   r	   baser   r   r   r   r   r   r   rQ   r   r   r   rG   rR   re   rh   rj   r   r   r   r   <module>   s     $_#2