o
    Rh                     @   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yB   dZdZY nw 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rjeneZeed< dS )    N)AnyDictListOptionalTupleTypeUnion   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoF)   	   r   c                
   @   s\   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jdee fddZ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   R/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/aiohttp/resolver.py__init__   s   zThreadedResolver.__init__r   hostportfamilyc                    s   | j j||tj|tjdI d H }g }|D ]K\}}}}}|tjkrHt|dk r(q|d r?tr?| j |t	I d H \}	}
t
|
}n|d d \}	}n|tjksOJ |\}	}|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_NUMERIC_SOCKET_FLAGSintAF_INETappendr   )r   r   r   r   infoshosts_r$   addressresolved_host_portr   r   r   resolve"   s@   

zThreadedResolver.resolvec                    s   d S r   r   r   r   r   r   closeN   s   zThreadedResolver.closer   r   N)__name__
__module____qualname____doc__r   r   AbstractEventLoopr   r%   r.   strr-   AddressFamilyr   r   r6   r8   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	jdee 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   s>   t d u rtdt j|i || _t| jds| j| _d S d S )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorDNSResolver	_resolverhasattr_resolve_with_queryr6   )r   r   rA   rB   r   r   r   r   U   s   zAsyncResolver.__init__r   r   r   r   c                    sD  z| j j||tj|tjdI d H }W n! tjjy4 } zt|j	dkr)|j	d nd}t
||d }~ww g }|jD ]_}|j}	|j}|tjkrzt|	dkrn|	d rntrn| j |	d dg|	dd  R tI d H }
|
j}n|	d d}|	d }n|tjksJ |	d d}|	d }|t||||dtd q:|st
d|S )N)r   r   r   r    r	   DNS lookup failedr   r   asciir"   )rG   r   r%   r&   r'   rD   errorDNSErrorr)   rA   OSErrornodesaddrr   r(   r*   r+   decoder,   noder.   r/   r   )r   r   r   r   respexcmsgr1   rR   r3   resultr4   r   r   r   r6   d   sV   




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	   rJ   r   r"   )r%   r(   rG   queryrD   rL   rM   r)   rA   rN   r/   r   AI_NUMERICHOST)
r   r   r   r   qtyperS   rT   rU   r1   rrr   r   r   rI      s2   

z!AsyncResolver._resolve_with_queryc                    s   | j   d S r   )rG   cancelr7   r   r   r   r8      s   zAsyncResolver.closer   r9   )r:   r;   r<   r=   r   r   r>   r   r   r%   r.   r?   r-   r@   r   r   r6   r   rI   r8   r   r   r   r   r   R   sB    

4
 r   r   )r   r%   systypingr   r   r   r   r   r   r   abcr
   r   __all__rD   rH   rF   aiodns_defaultImportErrorrZ   AI_NUMERICSERVr,   version_infor*   r   r   _DefaultTyper   __annotations__r   r   r   r   <module>   s&   
 $
:i