o
    óT·jI  ã                   @  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   ú[/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/httpcore2/_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   s,   €
ý
ÿþ
ÿü
ÿû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