U
    	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   Z/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/httpcore/_backends/trio.py__init__   s    zTrioStream.__init__)	max_bytestimeoutr   c                    s   |d krt dn|}tjttjttjti}t|H t|2 | j	j
|dI d H }|W  5 Q R  W  5 Q R  S Q R X W 5 Q R X 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              
      st   |sd S |d krt dn|}tjttjttjti}t|0 t| | j	j
|dI d H  W 5 Q R X W 5 Q R X 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 krt dn|}tjttjti}tj| j||ddd}t|d z(t	| |
 I d H  W 5 Q R X W n4 tk
r } z|  I d H  |W 5 d }~X Y nX W 5 Q R X 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#   
ssl_streamexcr   r   r   	start_tls8   s*      
 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|t|jS |dkr| d}| S d S )N
ssl_objectclient_addrserver_addrsocketis_readable)
isinstancer   r   r,   _ssl_object_get_socket_streamr6   getsocknamegetpeernametransport_streamSocketStreamAssertionErrorget_extra_infor7   )r   r2   r   r6   r   r   r   r@   S   s     
zTrioStream.get_extra_infoc                 C   s.   | j }t|tjr|j}qt|tjs*t|S r   )r   r8   r   r,   r=   r>   r?   r   r   r   r   r:   g   s
    zTrioStream._get_socket_stream)N)N)NN)__name__
__module____qualname__r   abcStreamr   inttypingOptionalr   bytesr%   r'   r(   ssl
SSLContextstrr   r1   Anyr@   r>   r:   r   r   r   r   r      s0         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 krg }|d krt dn|}tjttjttti}t|F t|0 tj	|||dI d H }|D ]}	|j
|	  qdW 5 Q R X W 5 Q R X t|S )Nr   )rO   rP   rQ   )r   r   r   r   r   r   OSErrorr
   r!   Zopen_tcp_stream
setsockoptr   )
r   rO   rP   r   rQ   rR   r"   r#   r   optionr   r   r   connect_tcpp   s(    
   
   zTrioBackend.connect_tcp)pathr   rR   r   c              
      s   |d krg }|d krt dn|}tjttjttti}t|@ t|* t	|I d H }|D ]}|j
|  q^W 5 Q R X W 5 Q R X t|S )Nr   )r   r   r   r   r   r   rS   r
   r!   Zopen_unix_socketrT   r   )r   rW   r   rR   r"   r#   r   rU   r   r   r   connect_unix_socket   s        
 zTrioBackend.connect_unix_socket)secondsr   c                    s   t |I d H  d S r   )r   sleep)r   rY   r   r   r   rZ      s    zTrioBackend.sleep)NNN)NN)rA   rB   rC   rL   rF   rG   rH   r   Iterabler   r   rV   rX   rZ   r   r   r   r   rN   o   s(        rN   )rJ   rG   r   _exceptionsr   r   r   r   r   r   r	   r
   baser   r   r   r   rN   r   r   r   r   <module>   s   (
\