a
    Of                     @   sx   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 )
    N   )ConnectErrorConnectTimeoutExceptionMapping	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions   )SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStreamc                   @   s   e Zd ZejjddddZdeej	e
 edddZdeej	e
 ddd	d
ZddddZdejej	e ej	e
 edddZeejdddZejdddZdS )
TrioStreamN)streamreturnc                 C   s
   || _ d S N)_streamselfr    r   P/var/www/ai-form-bot/venv/lib/python3.9/site-packages/httpcore/_backends/trio.py__init__   s    zTrioStream.__init__)	max_bytestimeoutr   c              	      s   |d u rt dn|}tjttjttjti}t|` t|6 | j	j
|dI d H }|W  d    W  d    S 1 sz0    Y  W d    n1 s0    Y  d S )Ninf)r   )floattrioTooSlowErrorr   BrokenResourceErrorr   ClosedResourceErrorr
   
fail_afterr   Zreceive_some)r   r   r   timeout_or_infexc_mapdatar   r   r   read   s    
zTrioStream.read)bufferr   r   c              	      s   |sd S |d u rt dn|}tjttjttjti}t|N t|$ | j	j
|dI d H  W d    n1 sp0    Y  W d    n1 s0    Y  d S )Nr   )r$   )r   r   r   r	   r   r   r    r
   r!   r   Zsend_all)r   r&   r   r"   r#   r   r   r   write%   s    
zTrioStream.write)r   c                    s   | j  I d H  d S r   )r   aclose)r   r   r   r   r(   5   s    zTrioStream.aclose)ssl_contextserver_hostnamer   r   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 st0    Y  W n6 ty } z|  I d H  |W Y d }~n
d }~0 0 W d    n1 s0    Y  t|S )Nr   TF)r)   r*   Zhttps_compatibleserver_side)r   r   r   r   r   r   	SSLStreamr   r
   r!   do_handshake	Exceptionr(   r   )r   r)   r*   r   r"   r#   Z
ssl_streamexcr   r   r   	start_tls8   s&    
08zTrioStream.start_tls)infor   c                 C   s   |dkrt | jtjr| jjS |dkr4|  j S |dkrJ|  j S |dkr| j}t |tjrl|j	}qXt |tj
s|J |jS |dkr| d}| S d S )NZ
ssl_objectclient_addrZserver_addrsocketis_readable)
isinstancer   r   r,   Z_ssl_object_get_socket_streamr3   getsocknamegetpeernametransport_streamSocketStreamget_extra_infor4   )r   r1   r   r3   r   r   r   r;   S   s     
zTrioStream.get_extra_infoc                 C   s.   | j }t|tjr|j}qt|tjs*J |S r   )r   r5   r   r,   r9   r:   r   r   r   r   r6   g   s
    zTrioStream._get_socket_stream)N)N)NN)__name__
__module____qualname__r   abcZStreamr   inttypingOptionalr   bytesr%   r'   r(   ssl
SSLContextstrr   r0   Anyr;   r:   r6   r   r   r   r   r      s,    
 
  r   c                   @   sv   e Zd Zdeeeje eje ejeje	  e
dddZdeeje ejeje	  e
dddZeddd	d
ZdS )TrioBackendN)hostportr   local_addresssocket_optionsr   c           
   	      s   |d u rg }|d u rt dn|}tjttjttti}t|d t|: tj	|||dI d H }|D ]}	|j
|	  qdW d    n1 s0    Y  W d    n1 s0    Y  t|S )Nr   )rI   rJ   rK   )r   r   r   r   r   r   OSErrorr
   r!   Zopen_tcp_stream
setsockoptr   )
r   rI   rJ   r   rK   rL   r"   r#   r   optionr   r   r   connect_tcpp   s    

HzTrioBackend.connect_tcp)pathr   rL   r   c              	      s   |d u rg }|d u rt dn|}tjttjttti}t|^ t|4 t	|I d H }|D ]}|j
|  q^W d    n1 s0    Y  W d    n1 s0    Y  t|S )Nr   )r   r   r   r   r   r   rM   r
   r!   Zopen_unix_socketrN   r   )r   rQ   r   rL   r"   r#   r   rO   r   r   r   connect_unix_socket   s    
HzTrioBackend.connect_unix_socket)secondsr   c                    s   t |I d H  d S r   )r   sleep)r   rS   r   r   r   rT      s    zTrioBackend.sleep)NNN)NN)r<   r=   r>   rF   r@   rA   rB   r   Iterabler   r   rP   rR   rT   r   r   r   r   rH   o   s(        rH   )rD   rA   r   _exceptionsr   r   r   r   r   r   r	   r
   baser   r   r   r   rH   r   r   r   r   <module>   s   (
\