U
    -e                     @   s   U d dl Z d dlZd dlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ dZzd dlZW n ek
rr   dZY nX dZG dd	 d	e
ZG d
d de
Zeeeef  ZereneZeed< dS )    N)AnyDictListOptionalTypeUnion   )AbstractResolver)get_running_loop)ThreadedResolverAsyncResolverDefaultResolverFc                   @   s^   e Zd ZdZdeej ddddZdej	fe
eeeee
ef  ddd	Zdd
ddZdS )r   zThreaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    N)loopreturnc                 C   s   t || _d S N)r
   _loop)selfr    r   Q/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/aiohttp/resolver.py__init__   s    zThreadedResolver.__init__r   )hostnameportfamilyr   c              
      s   | j j||tj|tjdI d H }g }|D ]\}}}}}|tjkrt|dk rNq(|d rxt|tjtj	B \}	}
t
|
}q|d d \}	}n|tjkst|\}	}|||	|||tjtjB d q(|S )N)typer   flags      r   hostr   r   protor   )r   getaddrinfosocketSOCK_STREAMAI_ADDRCONFIGAF_INET6lengetnameinfoNI_NUMERICHOSTNI_NUMERICSERVintAF_INETAssertionErrorappendAI_NUMERICHOSTAI_NUMERICSERV)r   r   r   r   infoshosts_r   addressr   Z_portr   r   r   resolve   s>    
 


zThreadedResolver.resolver   c                    s   d S r   r   r   r   r   r   closeJ   s    zThreadedResolver.close)N)__name__
__module____qualname____doc__r   asyncioAbstractEventLoopr   r!   r*   strr)   r   r   r   r3   r6   r   r   r   r   r      s      ,r   c                   @   s   e Zd ZdZdeej eeddddZde	j
feeeeeeef  ddd	Zde	j
feeeeeeef  dd
dZddddZdS )r   z9Use the `aiodns` package to make asynchronous DNS lookupsN)r   argskwargsr   c                 O   sH   t d krtdt|| _t j|d|i|| _t| jdsD| j| _d S )Nz Resolver requires aiodns libraryr   gethostbyname)	aiodnsRuntimeErrorr
   r   ZDNSResolver	_resolverhasattr_resolve_with_queryr3   )r   r   r>   r?   r   r   r   r   Q   s    
zAsyncResolver.__init__r   )r   r   r   r   c           	   
      s   z| j ||I d H }W nL tjjk
rd } z*t|jdkrF|jd nd}t||W 5 d }~X Y nX g }|jD ]$}|	||||dt
jt
jB d qp|std|S )Nr   DNS lookup failedr   r   )rC   r@   rA   errorDNSErrorr%   r>   OSError	addressesr,   r!   r-   r.   )	r   r   r   r   respexcmsgr0   r2   r   r   r   r3   a   s&    

zAsyncResolver.resolvec           
   
      s   |t jkrd}nd}z| j||I d H }W nL tjjk
rx } z*t|jdkrZ|jd nd}t	||W 5 d }~X Y nX g }|D ] }	|
||	j||dt jd q|st	d|S )NZAAAAAr   rF   r   r   )r!   r$   rC   queryrA   rG   rH   r%   r>   rI   r,   r   r-   )
r   r   r   r   ZqtyperK   rL   rM   r0   rrr   r   r   rE   {   s,    
z!AsyncResolver._resolve_with_queryr4   c                    s   | j   d S r   )rC   cancelr5   r   r   r   r6      s    zAsyncResolver.close)N)r7   r8   r9   r:   r   r;   r<   r   r   r!   r*   r=   r)   r   r   r3   rE   r6   r   r   r   r   r   N   s2           r   r   )r;   r!   typingr   r   r   r   r   r   abcr	   helpersr
   __all__rA   ImportErrorZaiodns_defaultr   r   Z_DefaultTyper   __annotations__r   r   r   r   <module>   s     
:Q