U
    ])                      @   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 eje ed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 k	r| S t dS )Ninf)float)r    r   v/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/httpx/concurrency/trio.py_or_inf   s    r   c                   @   s   e Zd Zejejejf eddddZ	e
dddZdeeeedd	d
ZedddZeddddZdeeeddddZddddZdS )	TCPStreamN)streamtimeoutr   c                 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__r   c                 C   s8   t | jtjsdS | j }|d kr(dS |dkr4dS dS )NzHTTP/1.1Zh2zHTTP/2)
isinstancer   r   	SSLStreamZselected_alpn_protocol)r"   identr   r   r   get_http_version%   s    
zTCPStream.get_http_version)nr   flagr   c              
      sr   |d kr| j }|d kp|j}t|r(|jnd}t|" | jj|dI d H W  5 Q R  S Q R X |rt d qd S )Ng{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   s2   | j }t|dr|j}qt|tjs(t|j S )Ntransport_stream)	r   hasattrr/   r%   r   SocketStreamAssertionErrorsocketZis_readable)r"   r   r   r   r   is_connection_droppedA   s
    
zTCPStream.is_connection_dropped)datar   c                 C   s   |  j |7  _ d S N)r   )r"   r5   r   r   r   write_no_blockP   s    zTCPStream.write_no_block)r5   r   r*   r   c                    s   | j rJ| j }d| _ z| j|||dI d H  W n tk
rH   || _ Y nX |sRd S |d kr`| j}t|j}t|D | j	4 I d H  | j
|I d H  W 5 Q I d H R X W 5 Q R  qW 5 Q R X |d kp|j}|rjt d qjd S )Nr   )r   r*   )r   writer	   Zwriter_bufferr   r   write_timeoutr   r,   r!   r   Zsend_allZraise_on_write_timeout)r"   r5   r   r*   Zprevious_datar9   r-   r   r   r   r8   S   s(    
"zTCPStream.writec                    s   | j  I d H  d S r6   )r   acloser"   r   r   r   closeu   s    zTCPStream.close)NN)NN)__name__
__module____qualname__typingUnionr   r1   r&   r   r#   strr(   intr   bytesr.   boolr4   r7   r8   r<   r   r   r   r   r      s0   
          "r   c                   @   sP   e Zd ZedddZeejej	 dddZ
dddd	Zddd
dZdS )PoolSemaphorepool_limitsc                 C   s
   || _ d S r6   rG   )r"   rH   r   r   r   r#   z   s    zPoolSemaphore.__init__r$   c                 C   s8   t | ds2| jj}|d kr"d | _ntj||d| _| jS )N
_semaphore)Z	max_value)r0   rH   Z
hard_limitrI   r   	Semaphore)r"   Zmax_connectionsr   r   r   	semaphore}   s    
 zPoolSemaphore.semaphoreNc              	      sT   | j d krd S t| jj}t|  | j  I d H  W 5 Q R  d S Q R X t d S r6   )rK   r   rH   Zpool_timeoutr   r,   acquirer   )r"   r   r   r   r   rL      s    
zPoolSemaphore.acquirec                 C   s   | j d krd S | j   d S r6   )rK   releaser;   r   r   r   rM      s    
zPoolSemaphore.release)r=   r>   r?   r   r#   propertyr@   Optionalr   rJ   rK   rL   rM   r   r   r   r   rF   y   s
   rF   c                   @   s   e Zd Zeeejej e	e
dddZejejejejdddZejejejejddd	Zeed
ddZeedddZedddZejejddddZdS )TrioBackend)hostnameportssl_contextr   r   c              	      sp   t |j}t|>}t||I d H }|d k	rNtj|||d}| I d H  W 5 Q R X |jrdt t	||dS )N)Zserver_hostname)r   r   )
r   connect_timeoutr   r,   open_tcp_streamr&   Zdo_handshakeZcancelled_caughtr   r   )r"   rQ   rR   rS   r   rT   Zcancel_scoper   r   r   r   rU      s    
zTrioBackend.open_tcp_stream)funcargskwargsr   c                    s*   t jj|rtj|f|n|f| I d H S r6   )r   Z	to_threadZrun_sync	functoolspartial)r"   rV   rW   rX   r   r   r   run_in_threadpool   s
    zTrioBackend.run_in_threadpool)	coroutinerW   rX   r   c                 O   s"   t j|rtj|f|n|f| S r6   )r   runrY   rZ   )r"   r\   rW   rX   r   r   r   r]      s
    zTrioBackend.run)limitsr   c                 C   s   t |S r6   )rF   )r"   r^   r   r   r   get_semaphore   s    zTrioBackend.get_semaphoremax_sizer   c                 C   s
   t |dS )N)ra   )Queuer"   ra   r   r   r   create_queue   s    zTrioBackend.create_queuer$   c                 C   s   t  S r6   )Eventr;   r   r   r   create_event   s    zTrioBackend.create_eventBackgroundManagerr\   rW   r   c                 G   s   t |f| S r6   )rg   r"   r\   rW   r   r   r   background_manager   s    zTrioBackend.background_managerN)r=   r>   r?   rB   rC   r@   rO   sslZ
SSLContextr   r   rU   CallableAnyr[   r]   r   r   r_   r   rd   r   rf   rj   r   r   r   r   rP      s.   
     rP   c                   @   s>   e Zd ZeddddZejdddZejddd	d
ZdS )rb   Nr`   c                 C   s   t tj\| _| _d S r6   )r   Zopen_memory_channelmathr   send_channelreceive_channelrc   r   r   r   r#      s    zQueue.__init__r$   c                    s   | j  I d H S r6   )rp   Zreceiver;   r   r   r   get   s    z	Queue.getr   c                    s   | j |I d H  d S r6   )ro   send)r"   r   r   r   r   put   s    z	Queue.put)	r=   r>   r?   rC   r#   r@   rm   rq   rs   r   r   r   r   rb      s   rb   c                   @   sR   e Zd ZddddZddddZedddZddd	d
ZddddZdS )re   Nr$   c                 C   s   t  | _d S r6   r   re   _eventr;   r   r   r   r#      s    zEvent.__init__c                 C   s   | j   d S r6   )ru   setr;   r   r   r   rv      s    z	Event.setc                 C   s
   | j  S r6   )ru   is_setr;   r   r   r   rw      s    zEvent.is_setc                    s   | j  I d H  d S r6   )ru   waitr;   r   r   r   rx      s    z
Event.waitc                 C   s   t  | _d S r6   rt   r;   r   r   r   clear   s    zEvent.clear)	r=   r>   r?   r#   rv   rE   rw   rx   ry   r   r   r   r   re      s
   re   c                   @   sL   e Zd ZejejddddZd dddZdeje	 e	e
ddd	d
ZdS )rg   Nrh   c                 G   s    || _ || _t | _d | _d S r6   )r\   rW   r   Zopen_nurserynursery_managernurseryri   r   r   r   r#      s    
zBackgroundManager.__init__r$   c                    s,   | j  I d H | _| jj| jf| j  | S r6   )rz   
__aenter__r{   Z
start_soonr\   rW   r;   r   r   r   r|      s    zBackgroundManager.__aenter__)exc_type	exc_value	tracebackr   c                    s(   | j d k	st| j|||I d H  d S r6   )r{   r2   rz   	__aexit__)r"   r}   r~   r   r   r   r   r      s    zBackgroundManager.__aexit__)NNN)r=   r>   r?   r@   rl   rm   r#   r|   ZTypeBaseExceptionr   r   r   r   r   r   rg      s      rg   ) rY   rn   rk   r@   typesr   r   configr   r   
exceptionsr   r   r   r	   baser   r   r   r   r   r   r   rO   r   r   r   rF   rP   rb   re   rg   r   r   r   r   <module>   s   $_#2