o
    MK&hl                     @  s   d dl mZ d dlZd dl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mZmZ G dd deZG d	d
 d
eZdS )    )annotationsN   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions   )SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStreamc                   @  s\   e Zd Zd#ddZd$d%ddZd$d&ddZd'ddZ		d(d)ddZd*ddZd+d!d"Z	dS ),
TrioStreamstreamtrio.abc.StreamreturnNonec                 C  s
   || _ d S N)_streamselfr    r   J/var/www/html/venv/lib/python3.10/site-packages/httpcore/_backends/trio.py__init__   s   
zTrioStream.__init__N	max_bytesinttimeoutfloat | Nonebytesc              	     s   |d u r	t dn|}tjttjttjti}t|1 t| | j	j
|dI d H }|W  d    W  d    S 1 s>w   Y  W d    d S 1 sNw   Y  d S )Ninf)r   )floattrioTooSlowErrorr   BrokenResourceErrorr   ClosedResourceErrorr   
fail_afterr   receive_some)r   r   r   timeout_or_infexc_mapdatar   r   r   read   s   
"zTrioStream.readbufferc              	     s   |sd S |d u rt dn|}tjttjttjti}t|0 t| | j	j
|dI d H  W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S )Nr!   )r+   )r"   r#   r$   r
   r%   r	   r&   r   r'   r   send_all)r   r-   r   r)   r*   r   r   r   write%   s   
"zTrioStream.writec                   s   | j  I d H  d S r   )r   aclose)r   r   r   r   r0   3      zTrioStream.aclosessl_contextssl.SSLContextserver_hostname
str | Noner   c                   s   |d u r	t dn|}tjttjti}tj| j||ddd}t|? zt	| |
 I d H  W d    n1 s;w   Y  W n tyV } z	|  I d H  |d }~ww W d    t|S 1 sdw   Y  t|S )Nr!   TF)r2   r4   https_compatibleserver_side)r"   r#   r$   r   r%   r   	SSLStreamr   r   r'   do_handshake	Exceptionr0   r   )r   r2   r4   r   r)   r*   
ssl_streamexcr   r   r   	start_tls6   s8   

zTrioStream.start_tlsinfostr
typing.Anyc                 C  s   |dkrt | jtjr| jjS |dkr|  j S |dkr%|  j S |dkrF| j}t |tjr;|j	}t |tjs2t |tj
sCJ |jS |dkrS| d}| S d S )N
ssl_objectclient_addrserver_addrsocketis_readable)
isinstancer   r#   r8   _ssl_object_get_socket_streamrD   getsocknamegetpeernametransport_streamSocketStreamget_extra_inforE   )r   r>   r   rD   r   r   r   rM   Q   s"   
zTrioStream.get_extra_infotrio.SocketStreamc                 C  s8   | j }t|tjr|j}t|tjs	t|tjsJ |S r   )r   rF   r#   r8   rK   rL   r   r   r   r   rH   e   s   zTrioStream._get_socket_stream)r   r   r   r   r   )r   r   r   r   r   r    )r-   r    r   r   r   r   )r   r   NN)r2   r3   r4   r5   r   r   r   r   )r>   r?   r   r@   )r   rN   )
__name__
__module____qualname__r   r,   r/   r0   r=   rM   rH   r   r   r   r   r      s    


r   c                   @  s8   e Zd Z			ddddZ		ddddZdddZdS )TrioBackendNhostr?   portr   r   r   local_addressr5   socket_options%typing.Iterable[SOCKET_OPTION] | Noner   r   c           
   	     s   |d u rg }|d u rt dn|}tjttjttti}t|? t| tj	|||dI d H }|D ]}	|j
|	  q3W d    n1 sEw   Y  W d    t|S W d    t|S 1 saw   Y  t|S )Nr!   )rT   rU   rV   )r"   r#   r$   r   r%   r   OSErrorr   r'   open_tcp_stream
setsockoptr   )
r   rT   rU   r   rV   rW   r)   r*   r   optionr   r   r   connect_tcpn   s0   



zTrioBackend.connect_tcppathc              	     s   |d u rg }|d u rt dn|}tjttjttti}t|< t| t	|I d H }|D ]}|j
|  q0W d    n1 sBw   Y  W d    t|S W d    t|S 1 s^w   Y  t|S )Nr!   )r"   r#   r$   r   r%   r   rY   r   r'   open_unix_socketr[   r   )r   r^   r   rW   r)   r*   r   r\   r   r   r   connect_unix_socket   s,   


zTrioBackend.connect_unix_socketsecondsr"   r   c                   s   t |I d H  d S r   )r#   sleep)r   ra   r   r   r   rb      r1   zTrioBackend.sleep)NNN)rT   r?   rU   r   r   r   rV   r5   rW   rX   r   r   rO   )r^   r?   r   r   rW   rX   r   r   )ra   r"   r   r   )rP   rQ   rR   r]   r`   rb   r   r   r   r   rS   m   s    rS   )
__future__r   ssltypingr#   _exceptionsr   r   r   r   r   r	   r
   r   baser   r   r   r   rS   r   r   r   r   <module>   s    (
X