
    tni/'                        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
mZ ddlmZmZ dZ	 d dlZ eej        d          Zn# e$ r dZdZY nw xY wej        ej        z  Zej        ej        z  Zej        Z eed          r
eej        z  Z G d	 d
e          Z G d de          Z G d d          Z e
eeef                  Z!ereneZ"e!e#d<   dS )    N)AnyDictFinalListOptionalTupleTypeUnion   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoFAI_MASKc            
           e Zd ZdZddeej                 ddfdZdej	        fde
ded	ej        dee         fd
Z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                 :    |pt          j                    | _        d S N)asyncioget_running_loop_loop)selfr   s     M/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/aiohttp/resolver.py__init__zThreadedResolver.__init__"   s    7W577


    r   hostportfamilyc                   K   | j                             ||t          j        |t                     d {V }g }|D ]\  }}}}}|t          j        k    rct          |          dk     r,|d         r9| j                             |t                     d {V \  }	}
t          |
          }n%|d d         \  }	}n|t          j
        k    sJ |\  }	}|                    t          ||	|||t                               |S )N)typer!   flags      hostnamer   r    r!   protor$   )r   r   socketSOCK_STREAM_AI_ADDRCONFIGAF_INET6lengetnameinfo_NAME_SOCKET_FLAGSintAF_INETappendr   _NUMERIC_SOCKET_FLAGS)r   r   r    r!   infoshosts_r)   addressresolved_host_ports              r   resolvezThreadedResolver.resolve%   sl      j,,#  - 
 
 
 
 
 
 
 
 &(,1 	 	(FAua((w<<!## 1: 	6 261G1G!32 2 , , , , , ,(M5 u::DD*1"1"+'M44////&-#tLL!&!/  	 	 	 	 r   c                 
   K   d S r    r   s    r   closezThreadedResolver.closeQ   s      r   r   r   N)__name__
__module____qualname____doc__r   r   AbstractEventLoopr   r*   r2   strr1   AddressFamilyr   r   r;   r?   r=   r   r   r   r      s         8 8Xg&?@ 8D 8 8 8 8 &'v~* **"*060D*	m	* * * *X     r   r   c                       e Zd ZdZ	 ddeej                 dededdfdZde	j
        fd	ed
ede	j        dee         fdZde	j
        fd	ed
ededeeeef                  fdZddZdS )r   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                 b   t           t          d          |pt          j                    | _        d | _        |s|rt          j        |i || _        d S t                      | _        | j        	                    | | j                  | _        t          | j        d          s| j        | _        d S d S )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorr   r   r   _managerDNSResolver	_resolver_DNSResolverManagerget_resolverhasattr_resolve_with_queryr;   )r   r   rI   rJ   s       r   r   zAsyncResolver.__init__X   s     >ABBB7W577
7;  	6 	#/@@@DNF+--33D$*EEt~77 	43DLLL	4 	4r   r   r   r    r!   c                   K   	 | j                             ||t          j        |t                     d {V }nT# t
          j        j        $ r=}t          |j	                  dk    r|j	        d         nd}t          d |          |d }~ww xY wg }|j        D ]}|j        }	|j        }|t          j        k    rt          |	          dk    r[|	d         rS| j                             |	d                             d          g|	dd          R t"                     d {V }
|
j        }nY|	d                             d          }|	d         }n5|t          j        k    sJ |	d                             d          }|	d         }|                    t+          ||||dt,                               |st          d d          |S )N)r    r#   r!   r$   r   DNS lookup failedr%   r   asciir'   )rQ   r   r*   r+   r,   rM   errorDNSErrorr.   rI   OSErrornodesaddrr!   r-   r/   decoder0   noder2   r3   r   r4   )r   r   r    r!   respexcmsgr6   r_   r8   resultr9   s               r   r;   zAsyncResolver.resolveq   s!     
	.33'$ 4        DD |$ 	. 	. 	.!$SX!!3!3#(1++9LC$$$#-	. &(J 	 	DMQYG[F((w<<!##
# $(>#=#= **733BgabbkBB*$ $      F %+KMM$+AJ$5$5g$>$>M"1:DD//// '
 1 1' : :qzLL!&!/  	 	 	 	  	5$ 3444s   49 B
8BB
c           
        K   |t           j        k    rdnd}	 | j                            ||           d {V }nT# t          j        j        $ r=}t          |j                  dk    r|j        d         nd}t          d |          |d }~ww xY wg }|D ]-}	|
                    ||	j        ||dt           j        d           .|st          d d          |S )NAAAAAr   rW   r   r'   )r*   r-   rQ   queryrM   rY   rZ   r.   rI   r[   r3   r   AI_NUMERICHOST)
r   r   r    r!   qtyper`   ra   rb   r6   rrs
             r   rU   z!AsyncResolver._resolve_with_query   s      "(6?!:!:vv	.--dE::::::::DD|$ 	. 	. 	.!$SX!!3!3#(1++9LC$$$#-	.  
	 
	BLL $G $#2 	 	 	 	  	5$ 3444s   !: B8BBc                    K   | j         r0| j                             | | j                   d | _         d | _        d S | j        | j                                         d | _        d S r   )rO   release_resolverr   rQ   cancelr>   s    r   r?   zAsyncResolver.close   sd      = 	M**4<<< DM!DNF>%N!!###r   r   r@   )rA   rB   rC   rD   r   r   rE   r   r   r*   r2   rF   r1   rG   r   r   r;   r   rU   r?   r=   r   r   r   r   U   s       CC 594 4w014 4 	4
 
4 4 4 44 &'v~1 11"1060D1	m	1 1 1 1h &'fn "03	d38n	   :
 
 
 
 
 
r   r   c                        e Zd ZU dZdZed          ed<   d fdZddZddd	e	j
        dd
fdZddd	e	j
        ddfdZ xZS )rR   zManager for aiodns.DNSResolver objects.

    This class manages shared aiodns.DNSResolver instances
    with no custom arguments across different event loops.
    N	_instancer   c                     | j         ?t                                          |           | _         | j                                          | j         S r   )ro   super__new___init)cls	__class__s    r   rr   z_DNSResolverManager.__new__   s>    = !GGOOC00CMM!!!}r   c                 6    t          j                    | _        d S r   )weakrefWeakKeyDictionary
_loop_datar>   s    r   rs   z_DNSResolverManager._init   s    
 %'' 	r   clientr   r   zaiodns.DNSResolverc                     || j         vr5t          j        |          }t          j                    }||f| j         |<   n| j         |         \  }}|                    |           |S )a&  Get or create the shared aiodns.DNSResolver instance for a specific event loop.

        Args:
            client: The AsyncResolver instance requesting the resolver.
                   This is required to track resolver usage.
            loop: The event loop to use for the resolver.
        )r   )ry   rM   rP   rw   WeakSetadd)r   rz   r   resolver
client_sets        r   rS   z _DNSResolverManager.get_resolver   sq     t&&)t444H;B?;L;LJ%-z$:DOD!! $(?4#8 Hj 	vr   c                     | j                             |          }|dS |\  }}|                    |           |s ||                                 | j         |= dS dS )zRelease the resolver for an AsyncResolver client when it's closed.

        Args:
            client: The AsyncResolver instance to release.
            loop: The event loop the resolver was using.
        N)ry   getdiscardrm   )r   rz   r   current_loop_datar~   r   s         r   rl   z$_DNSResolverManager.release_resolver   s{     !O//55$F0*6""" 	&#!!!%%%	& 	&r   )r   rR   r@   )rA   rB   rC   rD   ro   r   __annotations__rr   rs   r   rE   rS   rl   __classcell__)ru   s   @r   rR   rR      s           26Ix-.555     ( ( ( (%-4-F	   .&%&-4-F&	& & & & & & & &r   rR   r   )$r   r*   rw   typingr   r   r   r   r   r   r	   r
   abcr   r   __all__rM   rT   rP   aiodns_defaultImportErrorrh   AI_NUMERICSERVr4   NI_NUMERICHOSTNI_NUMERICSERVr0   AI_ADDRCONFIGr,   r   r   r   rR   _DefaultTyper   r   r=   r   r   <module>r      s      G G G G G G G G G G G G G G G G G G G G 0 0 0 0 0 0 0 0
BMMMWV/??NN   FNNN
 -0EE *V-BB %
769 %fn$N7 7 7 7 7' 7 7 7tv v v v v$ v v vr@& @& @& @& @& @& @& @&F E-)99:;1? UEU U U U U Us   A 	AA