o
    NEg                      @   s   d dl Z d dlZd dl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y3   dZY nw dZG dd	 d	eZG d
d deZerLeZdS eZdS )    N)AnyDictListOptional   )AbstractResolver)get_running_loop)ThreadedResolverAsyncResolverDefaultResolverFc                   @   sb   e Zd ZdZddeej ddfddZdej	fde
d	ed
edeee
ef  fddZdddZdS )r	   zsUse Executor for synchronous getaddrinfo() calls, which defaults to
    concurrent.futures.ThreadPoolExecutor.
    Nloopreturnc                 C   s   t || _d S N)r   _loop)selfr    r   j/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/aiohttp/resolver.py__init__   s   zThreadedResolver.__init__r   hostnameportfamilyc              
      s   | j j||tj|tjdI d H }g }|D ]9\}}}}}|tjkr6|d r6t|tjtjB \}	}
t	|
}n|d d \}	}|
||	|||tjtjB d q|S )N)typer   flags      r   hostr   r   protor   )r   getaddrinfosocketSOCK_STREAMAI_ADDRCONFIGAF_INET6getnameinfoNI_NUMERICHOSTNI_NUMERICSERVintappendAI_NUMERICHOSTAI_NUMERICSERV)r   r   r   r   infoshosts_r   addressr   _portr   r   r   resolve   s4   

zThreadedResolver.resolvec                    s   d S r   r   r   r   r   r   close@   s   zThreadedResolver.closer   r   N)__name__
__module____qualname____doc__r   asyncioAbstractEventLoopr   r   AF_INETstrr&   r   r   r   r/   r1   r   r   r   r   r	      s    
$r	   c                   @   s   e Zd ZdZ	ddeej dededdfddZd	e	j
fd
edededeeeef  fddZd	e	j
fd
edededeeeef  fddZdddZdS )r
   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                 O   sL   t d u rtdt|| _t j|d|i|| _t| jds$| j| _d S d S )Nz Resolver requires aiodns libraryr   gethostbyname)	aiodnsRuntimeErrorr   r   DNSResolver	_resolverhasattr_resolve_with_queryr/   )r   r   r;   r<   r   r   r   r   G   s   
zAsyncResolver.__init__r   r   r   r   c           	   
      s   z| j ||I d H }W n! tjjy. } zt|jdkr#|jd nd}t||d }~ww g }|jD ]}|	||||dt
jt
jB d q4|sMtd|S )Nr   DNS lookup failedr   r   )rA   r=   r>   errorDNSErrorlenr;   OSError	addressesr'   r   r(   r)   )	r   r   r   r   respexcmsgr+   r-   r   r   r   r/   W   s,   


zAsyncResolver.resolvec           
   
      s   |t jkr	d}nd}z| j||I d H }W n! tjjy8 } zt|jdkr-|jd nd}t	||d }~ww g }|D ]}	|
||	j||dt jd q=|sTt	d|S )NAAAAAr   rD   r   r   )r   r"   rA   queryr>   rE   rF   rG   r;   rH   r'   r   r(   )
r   r   r   r   qtyperJ   rK   rL   r+   rrr   r   r   rC   q   s2   

z!AsyncResolver._resolve_with_queryc                    s   | j  S r   )rA   cancelr0   r   r   r   r1      s   
zAsyncResolver.closer   r2   )r3   r4   r5   r6   r   r7   r8   r   r   r   r9   r:   r&   r   r   r/   rC   r1   r   r   r   r   r
   D   sB    


 r
   )r7   r   typingr   r   r   r   abcr   helpersr   __all__r>   ImportErroraiodns_defaultr	   r
   r   r   r   r   r   <module>   s    0Q