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{®Gáz„?)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 £ qÚW 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