o
    ͷ6iu                     @   s   d dl mZ d dlmZ d dlZddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZmZmZmZ d	e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dS )    )
SSLContext)OptionalN   )
CloseErrorConnectErrorConnectTimeout	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions)TimeoutDict   )AsyncBackend	AsyncLockAsyncSemaphoreAsyncSocketStreamvaluereturnc                 C   s   | d ur| S t dS )Ninf)float)r    r   \/var/www/hoanhtaovolam_webdjango/env/lib/python3.10/site-packages/httpcore/_backends/trio.pynone_as_inf   s   r   c                   @   s   e Zd ZdejjddfddZdefddZde	d	e
d
edd fddZded
ede	fddZde	d
eddfddZdddZdefddZdS )SocketStreamstreamr   Nc                 C   s   || _ t | _t | _d S N)r   trioLock	read_lock
write_lockselfr   r   r   r   __init__   s   
zSocketStream.__init__c                 C   s,   t | jtjs	dS | j }|dkrdS dS )NzHTTP/1.1h2zHTTP/2)
isinstancer   r   	SSLStreamselected_alpn_protocol)r"   identr   r   r   get_http_version   s   
zSocketStream.get_http_versionhostnamessl_contexttimeoutc              	      s   t |d}tjttjti}tj| j||	dd}t
|( t| | I d H  W d    n1 s8w   Y  t|W  d    S 1 sKw   Y  d S )Nconnectascii)r+   server_hostname)r   getr   TooSlowErrorr   BrokenResourceErrorr   r&   r   decoder   
fail_afterdo_handshaker   )r"   r*   r+   r,   connect_timeoutexc_map
ssl_streamr   r   r   	start_tls%   s    
$zSocketStream.start_tlsnc              
      s   t |d}tjttjti}| j4 I d H P t|8 t	|# | j
j|dI d H W  d    W  d    W  d   I d H  S 1 sHw   Y  W d    n1 sWw   Y  W d   I d H  d S 1 I d H smw   Y  d S )Nread)	max_bytes)r   r0   r   r1   r	   r2   r   r   r   r4   r   receive_some)r"   r:   r,   read_timeoutr7   r   r   r   r;   8   s   
.zSocketStream.readdatac              
      s   |sd S t |d}tjttjti}| j4 I d H O t|7 t	|" | j
|I d H W  d    W  d    W  d   I d H  S 1 sKw   Y  W d    n1 sZw   Y  W d   I d H  d S 1 I d H spw   Y  d S )Nwrite)r   r0   r   r1   r   r2   r
   r    r   r4   r   send_all)r"   r?   r,   write_timeoutr7   r   r   r   r@   A   s"   
.zSocketStream.writec              	      s   | j 4 I d H + ttjti | j I d H  W d    n1 s#w   Y  W d   I d H  d S 1 I d H s9w   Y  d S r   )r    r   r   r2   r   r   acloser"   r   r   r   rC   P   s   .zSocketStream.aclosec                 C   s>   | j }t|tjr|j}t|tjs	t|tjsJ |j S r   )r   r%   r   r&   transport_streamr   socketis_readabler!   r   r   r   is_connection_droppedU   s   
z"SocketStream.is_connection_droppedr   N)__name__
__module____qualname__r   abcStreamr#   strr)   bytesr   r   r9   intr;   r@   rC   boolrH   r   r   r   r   r      s     
	
r   c                   @   s*   e Zd Zd	ddZd	ddZd	ddZdS )
r   r   Nc                 C   s   t  | _d S r   )r   r   _lockrD   r   r   r   r#   f      zLock.__init__c                 C      | j   d S r   )rS   releaserD   r   r   r   rV   i   rT   zLock.releasec                    s   | j  I d H  d S r   )rS   acquirerD   r   r   r   rW   l   s   zLock.acquirerI   )rJ   rK   rL   r#   rV   rW   r   r   r   r   r   e   s    

r   c                   @   sP   e Zd ZdedefddZedejfddZ	dd	e
ddfd
dZdddZdS )	Semaphore	max_value	exc_classc                 C   s   || _ || _d S r   )rY   rZ   r"   rY   rZ   r   r   r   r#   q   s   
zSemaphore.__init__r   c                 C   s$   t | dstj| j| jd| _| jS )N
_semaphore)rY   )hasattrr   rX   rY   r\   rD   r   r   r   	semaphoreu   s   
zSemaphore.semaphoreNr,   c                    sP   t |}t| | j I d H  	 W d    d S 1 sw   Y  |  r   )r   r   move_on_afterr^   rW   rZ   )r"   r,   r   r   r   rW   {   s    zSemaphore.acquirec                 C   rU   r   )r^   rV   rD   r   r   r   rV      rT   zSemaphore.releaser   rI   )rJ   rK   rL   rQ   typer#   propertyr   rX   r^   r   rW   rV   r   r   r   r   rX   p   s    	rX   c                
   @   s`   e Zd Zdededee dedef
ddZ	de
fdd	Zd
ededefddZdefddZdS )TrioBackendr*   portr+   r,   r   c              	      s   t |d}tjttjti}t|I t|3 t	||I d H }|d ur:tj
|||dd}| I d H  t|dW  d    W  d    S 1 sPw   Y  W d    d S 1 s`w   Y  d S )Nr-   r.   )r/   )r   )r   r0   r   r1   r   r2   r   r   r4   open_tcp_streamr&   r3   r5   r   )r"   r*   rc   r+   r,   r6   r7   r   r   r   r   rd      s$   
"zTrioBackend.open_tcp_streamc                 C   s   t  S r   )r   rD   r   r   r   create_lock   s   zTrioBackend.create_lockrY   rZ   c                 C   s   t ||dS )N)rZ   )rX   r[   r   r   r   create_semaphore   s   zTrioBackend.create_semaphorec                 C   s   t  S r   )r   current_timerD   r   r   r   time   s   zTrioBackend.timeN)rJ   rK   rL   rP   rQ   r   r   r   r   rd   r   re   r`   r   rf   r   rh   r   r   r   r   rb      s    
rb   )sslr   typingr   r   _exceptionsr   r   r   r   r	   r
   r   r   _typesr   baser   r   r   r   r   r   r   r   rX   rb   r   r   r   r   <module>   s    (
M