U
    ^g%iR                     @   s   U 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
 ddlmZmZ dZzd dlZeejdZW n ek
r   dZdZY nX ejejB ZejejB Zejdk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TupleTypeUnion   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoF)   	   r   c                   @   sX   e Zd ZdZdeej ddddZdej	fe
eejee 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   |p
t  | _d S N)asyncioget_running_loop_loop)selfr    r   O/var/www/html/api-medvista/venv/lib/python3.8/site-packages/aiohttp/resolver.py__init__    s    zThreadedResolver.__init__r   hostportfamilyr   c                    s   | j j||tj|tjdI d H }g }|D ]\}}}}}|tjkrt|dk rNq(|d r|tr|| j |t	I d H \}	}
t
|
}q|d d \}	}n|tjkst|\}	}|t||	|||td q(|S )N)typer   flagsr      hostnamer   r   r   protor!   )r   r   socketSOCK_STREAMAI_ADDRCONFIGAF_INET6len_SUPPORTS_SCOPE_IDgetnameinfo_NAME_SOCKET_FLAGSintAF_INETAssertionErrorappendr   _NUMERIC_SOCKET_FLAGS)r   r   r   r   infoshosts_r%   addressresolved_hostZ_portr   r   r   resolve#   s@    
 
zThreadedResolver.resolver   c                    s   d S r   r   r   r   r   r   closeO   s    zThreadedResolver.close)N)__name__
__module____qualname____doc__r   r   AbstractEventLoopr   r&   r/   strr.   AddressFamilyr   r   r8   r;   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	jee 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   s6   t d krtdt j||| _t| jds2| j| _d S )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorDNSResolver	_resolverhasattr_resolve_with_queryr8   )r   r   rC   rD   r   r   r   r   V   s
    zAsyncResolver.__init__r   r   c                    sR  z$| j j||tj|tjdI d H }W nN tjjk
rr } z,t|j	dkrR|j	d nd}t
d ||W 5 d }~X Y nX g }|jD ]}|j}	|j}|tjkrt|	dkr|	d rtr| j |	d df|	dd  tI d H }
|
j}n|	d d}|	d }n&|tjkst|	d d}|	d }|t||||dtd q~|sNt
d d|S )N)r   r    r   r!   r	   DNS lookup failedr   r   asciir#   )rI   r   r&   r'   r(   rF   errorDNSErrorr*   rC   OSErrorZnodesaddrr   r)   r+   r,   decoder-   noder/   r0   r1   r   r2   )r   r   r   r   respexcmsgr4   rS   r6   resultr7   r   r   r   r8   e   sP    




zAsyncResolver.resolvec           
   
      s   |t jkrd}nd}z| j||I d H }W nN tjjk
rz } z,t|jdkrZ|jd nd}t	d ||W 5 d }~X Y nX g }|D ] }	|
||	j||dt jd q|st	d d|S )NZAAAAAr	   rL   r   r#   )r&   r)   rI   queryrF   rN   rO   r*   rC   rP   r1   r   AI_NUMERICHOST)
r   r   r   r   ZqtyperT   rU   rV   r4   Zrrr   r   r   rK      s,    

z!AsyncResolver._resolve_with_queryr9   c                    s   | j   d S r   )rI   cancelr:   r   r   r   r;      s    zAsyncResolver.close)N)r<   r=   r>   r?   r   r   r@   r   r   r&   r/   rA   r.   rB   r   r   r8   r   rK   r;   r   r   r   r   r   S   s2       4    r   r   )!r   r&   systypingr   r   r   r   r   r   r   abcr
   r   __all__rF   rJ   rH   Zaiodns_defaultImportErrorrZ   AI_NUMERICSERVr2   NI_NUMERICHOSTNI_NUMERICSERVr-   version_infor+   r   r   Z_DefaultTyper   __annotations__r   r   r   r   <module>   s&    $

:i