U
    h                     @  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 ddl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	ReadErrorReadTimeout
WriteErrorWriteTimeoutmap_exceptions)is_socket_readable   )SOCKET_OPTIONAsyncNetworkBackendAsyncNetworkStreamc                   @  sx   e Zd ZdddddZdddd	d
ddZdd	dddddZddddZd dddddddZdddddZdS )!AnyIOStreamzanyio.abc.ByteStreamNone)streamreturnc                 C  s
   || _ d S N)_stream)selfr    r   </tmp/pip-unpacked-wheel-a8helrha/httpcore/_backends/anyio.py__init__   s    zAnyIOStream.__init__Nintfloat | Nonebytes)	max_bytestimeoutr   c                   s   t ttjttjttjti}t|x t|b z.| j	j
|dI d H W W  5 Q R  W  5 Q R  S  tjk
r   Y W 5 Q R  W 5 Q R  dS X W 5 Q R X W 5 Q R X d S )N)r       )TimeoutErrorr   anyioBrokenResourceErrorr   ClosedResourceErrorEndOfStreamr
   
fail_afterr   Zreceive)r   r   r   exc_mapr   r   r   read   s        
.zAnyIOStream.read)bufferr   r   c              
     s^   |sd S t 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 )N)item)
r    r	   r!   r"   r   r#   r
   r%   r   send)r   r(   r   r&   r   r   r   write'   s       
zAnyIOStream.write)r   c                   s   | j  I d H  d S r   )r   aclose)r   r   r   r   r,   4   s    zAnyIOStream.aclosezssl.SSLContext
str | Noner   )ssl_contextserver_hostnamer   r   c                   s   t ttjttjttjti}t|x z<t	|( tj
jjj| j||ddd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 )NF)r.   hostnameZstandard_compatibleserver_side)r    r   r!   r"   r   r$   sslSSLErrorr
   r%   streamstlsZ	TLSStreamwrapr   	Exceptionr,   r   )r   r.   r/   r   r&   Z
ssl_streamexcr   r   r   	start_tls7   s.        

 zAnyIOStream.start_tlsstrz
typing.Any)infor   c                 C  s   |dkr| j tjjjjd S |dkr:| j tjjj	d S |dkrV| j tjjj
d S |dkrr| j tjjjd S |dkr| j tjjjd }t|S d S )N
ssl_objectclient_addrZserver_addrsocketZis_readable)r   extrar!   r4   r5   ZTLSAttributer<   abcZSocketAttributelocal_addressZremote_addressZ
raw_socketr   )r   r;   sockr   r   r   get_extra_infoR   s    zAnyIOStream.get_extra_info)N)N)NN)	__name__
__module____qualname__r   r'   r+   r,   r9   rC   r   r   r   r   r      s     r   c                   @  sL   e Zd Zddddddddd	d
ZddddddddZdddddZdS )AnyIOBackendNr:   r   r   r-   z%typing.Iterable[SOCKET_OPTION] | Noner   )hostportr   rA   socket_optionsr   c           	   
     s|   |d krg }t ttttjti}t|H t|2 tj|||dI d H }|D ]}|j	j
|  qNW 5 Q R X W 5 Q R X t|S )N)Zremote_hostZremote_portZ
local_host)r    r   OSErrorr   r!   r"   r
   r%   connect_tcp_raw_socket
setsockoptr   )	r   rH   rI   r   rA   rJ   r&   r   optionr   r   r   rL   b   s&       
"zAnyIOBackend.connect_tcp)pathr   rJ   r   c              
     sv   |d krg }t ttttjti}t|B t|, t|I d H }|D ]}|j	j
|  qHW 5 Q R X W 5 Q R X t|S r   )r    r   rK   r   r!   r"   r
   r%   Zconnect_unixrM   rN   r   )r   rP   r   rJ   r&   r   rO   r   r   r   connect_unix_socket}   s       
"z AnyIOBackend.connect_unix_socketfloatr   )secondsr   c                   s   t |I d H  d S r   )r!   sleep)r   rS   r   r   r   rT      s    zAnyIOBackend.sleep)NNN)NN)rD   rE   rF   rL   rQ   rT   r   r   r   r   rG   a   s        rG   )
__future__r   r2   typingr!   _exceptionsr   r   r   r   r   r	   r
   _utilsr   baser   r   r   r   rG   r   r   r   r   <module>   s   $	L