o
    ~#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yB   dZdZY nw 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rpe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   W/var/www/GraceOrthoHospital/venv_grace/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_NAME_SOCKET_FLAGSintAF_INETappendr   _NUMERIC_SOCKET_FLAGS)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   closeO   s   zThreadedResolver.closer   r   N)__name__
__module____qualname____doc__r   r   AbstractEventLoopr   r%   r.   strr-   AddressFamilyr   r   r7   r9   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_queryr7   )r   r   rB   rC   r   r   r   r   V   s   zAsyncResolver.__init__r   r   r   r   c                    sH  z| j j||tj|tjdI d H }W n" tjjy5 } zt|j	dkr)|j	d nd}t
d ||d }~ww g }|jD ]_}|j}	|j}|tjkr{t|	dkro|	d rotro| 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 d|S )N)r   r   r   r    r	   DNS lookup failedr   r   asciir"   )rH   r   r%   r&   r'   rE   errorDNSErrorr)   rB   OSErrornodesaddrr   r(   r*   r+   decoder,   noder.   r/   r   r0   )r   r   r   r   respexcmsgr2   rS   r4   resultr5   r   r   r   r7   e   sV   




zAsyncResolver.resolvec           
   
      s   |t jkr	d}nd}z| j||I d H }W n" tjjy9 } zt|jdkr-|jd nd}t	d ||d }~ww g }|D ]}	|
||	j||dt jd q>|sVt	d d|S )NAAAAAr	   rK   r   r"   )r%   r(   rH   queryrE   rM   rN   r)   rB   rO   r/   r   AI_NUMERICHOST)
r   r   r   r   qtyperT   rU   rV   r2   rrr   r   r   rJ      s2   

z!AsyncResolver._resolve_with_queryc                    s   | j   d S r   )rH   cancelr8   r   r   r   r9      s   zAsyncResolver.closer   r:   )r;   r<   r=   r>   r   r   r?   r   r   r%   r.   r@   r-   rA   r   r   r7   r   rJ   r9   r   r   r   r   r   S   sB    

4
 r   r   )!r   r%   systypingr   r   r   r   r   r   r   abcr
   r   __all__rE   rI   rG   aiodns_defaultImportErrorr[   AI_NUMERICSERVr0   NI_NUMERICHOSTNI_NUMERICSERVr,   version_infor*   r   r   _DefaultTyper   __annotations__r   r   r   r   <module>   s(   
 $
:i