
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    '7`                      @   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k
rh   dZY nX dZG dd	 d	eZG d
d deZereneZdS )    N)AnyDictListOptional   )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	   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   C/opt/alt/python38/lib64/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 ]r\}}}}}|tjkrj|d rjt|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   Zinfoshosts_r   addressr   Z_portr   r   r   resolve   s4     


zThreadedResolver.resolver   c                    s   d S r   r   r   r   r   r   close@   s    zThreadedResolver.close)N)__name__
__module____qualname____doc__r   asyncioAbstractEventLoopr   r   AF_INETstrr&   r   r   r   r-   r0   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_queryr-   )r   r   r9   r:   r   r   r   r   G   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   )r>   r;   r<   errorDNSErrorlenr9   OSErrorZ	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 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   rA   r   r   )r   r"   r>   queryr<   rB   rC   rD   r9   rE   r'   r   r(   )
r   r   r   r   ZqtyperF   rG   rH   r*   Zrrr   r   r   r@   q   s,    
z!AsyncResolver._resolve_with_queryr.   c                    s
   | j  S r   )r>   cancelr/   r   r   r   r0      s    zAsyncResolver.close)N)r1   r2   r3   r4   r   r5   r6   r   r   r   r7   r8   r&   r   r   r-   r@   r0   r   r   r   r   r
   D   s2           r
   )r5   r   typingr   r   r   r   abcr   Zhelpersr   __all__r<   ImportErrorZaiodns_defaultr	   r
   r   r   r   r   r   <module>   s   
0Q