U
    <{fM                      @   s  d Z ddlZddlZddlZddlZddlZddlZddlZej	
dsPeddd ZejjZG dd dejjZG d	d
 d
ejjZej	
drddlZddlZddlZejZejjjZddlmZmZmZ G dd deZG dd dej Z!nejj"Z!G dd dejj#Z#dS )z$trio async I/O library query support    Ntrioztrio not found or too oldc                 C   s    | d k	rt | S tj S d S N)r   Zmove_on_afterdns_asyncbackendZNullContexttimeout r   P/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/dns/_trio_backend.py_maybe_timeout   s    
r
   c                       sL   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )DatagramSocketc                    s   t  |j || _d S r   )super__init__familysocket)selfr   	__class__r   r	   r   !   s    zDatagramSocket.__init__c              
      sB   t |" | j||I d H W  5 Q R  S Q R X tjj|dd S Nr   )r
   r   sendtor   	exceptionTimeout)r   whatdestinationr   r   r   r	   r   %   s
    
&zDatagramSocket.sendtoc              
      s@   t |  | j|I d H W  5 Q R  S Q R X tjj|dd S r   )r
   r   recvfromr   r   r   r   sizer   r   r   r	   r   ,   s    
$zDatagramSocket.recvfromc                    s   | j   d S r   )r   closer   r   r   r	   r   1   s    zDatagramSocket.closec                    s
   | j  S r   )r   getpeernamer   r   r   r	   r   4   s    zDatagramSocket.getpeernamec                    s
   | j  S r   )r   getsocknamer   r   r   r	   r   7   s    zDatagramSocket.getsocknamec                    s   t d S r   NotImplementedErrorr   r   r   r   r	   getpeercert:   s    zDatagramSocket.getpeercert)__name__
__module____qualname__r   r   r   r   r   r   r#   __classcell__r   r   r   r	   r       s   r   c                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )StreamSocketFc                 C   s   || _ || _|| _d S r   )r   streamtls)r   r   r)   r*   r   r   r	   r   ?   s    zStreamSocket.__init__c              
      s@   t |  | j|I d H W  5 Q R  S Q R X tjj|dd S r   )r
   r)   Zsend_allr   r   r   )r   r   r   r   r   r	   sendallD   s    
$zStreamSocket.sendallc              
      s@   t |  | j|I d H W  5 Q R  S Q R X tjj|dd S r   )r
   r)   Zreceive_somer   r   r   r   r   r   r	   recvI   s    
$zStreamSocket.recvc                    s   | j  I d H  d S r   )r)   acloser   r   r   r	   r   N   s    zStreamSocket.closec                    s$   | j r| jjj S | jj S d S r   )r*   r)   transport_streamr   r   r   r   r   r	   r   Q   s    zStreamSocket.getpeernamec                    s$   | j r| jjj S | jj S d S r   )r*   r)   r.   r   r   r   r   r   r	   r   W   s    zStreamSocket.getsocknamec              	      s<   | j r4t| | j I d H  W 5 Q R X | j S td S r   )r*   r
   r)   do_handshaker#   r!   r"   r   r   r	   r#   ]   s
    

zStreamSocket.getpeercertN)F)
r$   r%   r&   r   r+   r,   r   r   r   r#   r   r   r   r	   r(   >   s   
r(   Zdoh)_compute_times_expiration_for_this_attempt
_remainingc                       s8   e Zd Z fddZd
ddZdddZdd	 Z  ZS )_NetworkBackendc                    s&   t    || _|| _|| _|| _d S r   )r   r   _local_port	_resolver_bootstrap_address_family)r   resolver
local_portbootstrap_addressr   r   r   r	   r   q   s
    
z_NetworkBackend.__init__Nc              	      s$  g }t |\}}tj|r(|| nV| jd k	r@|| j n>t|}| j}	|r^tj|}	| j	j
||	|dI d H }
|
 }|D ]}zvtj|}|d k	s| jdkr|| jf}nd }||f}td|}t|}t |tjd|||I d H }t|jW   S  tk
r   Y qY qX qtjd S )N)r   Zlifetimer   g       @)r0   r   inetZ
is_addressappendr6   r2   r7   Zaf_for_addressr5   resolve_name	addressesr4   r1   Backendmake_socketr   SOCK_STREAM_CoreTrioStreamr)   	ExceptionhttpcoreZConnectError)r   hostportr   local_addresssocket_optionsr>   _Z
expirationr   Zanswersaddressafsourcer   Zattempt_expirationsockr   r   r	   connect_tcpx   sJ    
  
     
z_NetworkBackend.connect_tcpc                    s   t d S r   r    )r   pathr   rH   r   r   r	   connect_unix_socket   s    z#_NetworkBackend.connect_unix_socketc                    s   t |I d H  d S r   r   sleep)r   secondsr   r   r	   rR      s    z_NetworkBackend.sleep)N)N)r$   r%   r&   r   rN   rP   rR   r'   r   r   r   r	   r3   p   s    
% 
r3   c                       s*   e Zd Zdddejd fdd
Z  ZS )_HTTPTransportr   N)r9   r:   r8   r   c                   s>   |d krdd l }|j }t j|| t||||| j_d S )Nr   )Zdns.asyncresolverZasyncresolverResolverr   r   r3   _poolZ_network_backend)r   r9   r:   r8   r   argskwargsr   r   r   r	   r      s    	
   z_HTTPTransport.__init__)r$   r%   r&   r   	AF_UNSPECr   r'   r   r   r   r	   rT      s
   rT   c                   @   s6   e Zd Zdd ZdddZdd Zd	d
 Zdd ZdS )r?   c                 C   s   dS )Nr   r   r   r   r   r	   name   s    zBackend.namer   Nc	              	      s4  t j|||}	d }
zl|r0|	t||I d H  |tjkr~d}t|  |	t||I d H  d}W 5 Q R X |s~tjj	|dW n t
k
r   |	   Y nX |tjkrt|	S |tjkrt |	}
d}|rd}zt j|
||d}
W n& t
k
r   |
 I d H   Y nX t||
|S tdd|  d S )NFTr   )server_hostnamezunsupported socket ztype )r   r   bind_lltuplerA   r
   connectr   r   r   rC   r   
SOCK_DGRAMr   ZSocketStreamZ	SSLStreamr-   r(   r!   )r   rK   socktypeprotorL   r   r   ssl_contextr[   sr)   	connectedr*   r   r   r	   r@      sJ    




  
zBackend.make_socketc                    s   t |I d H  d S r   rQ   )r   intervalr   r   r	   rR      s    zBackend.sleepc                 C   s   t S r   )rT   r   r   r   r	   get_transport_class   s    zBackend.get_transport_classc              
      s8   t | |I d H W  5 Q R  S Q R X tjj|dd S r   )r
   r   r   r   )r   	awaitabler   r   r   r	   wait_for   s
    
zBackend.wait_for)r   NNNNN)r$   r%   r&   rZ   r@   rR   rf   rh   r   r   r   r	   r?      s         
/r?   )$__doc__r   r   Ztrio.socketZdns._asyncbackendr   Zdns._featuresZdns.exceptionZdns.inetZ	_featuresZhaveImportErrorr
   r;   Zlow_level_address_tupler]   r   r   r(   rD   Zhttpcore._backends.trioZhttpxZAsyncNetworkBackendZ_CoreAsyncNetworkBackendZ	_backendsZ
TrioStreamrB   Z	dns.queryr0   r1   r2   r3   ZAsyncHTTPTransportrT   ZNullTransportr?   r   r   r   r	   <module>   s0   (
4