
    3Cf                         U d dl Z d dlZd dlmZmZmZmZmZmZ ddl	m
Z
 ddlmZ dZ	 d dlZdZ G d d	e
      Z G d
 de
      Zeeeef      ZereneZeed<   y# e$ r dZY 7w xY w)    N)AnyDictListOptionalTypeUnion   )AbstractResolver)get_running_loop)ThreadedResolverAsyncResolverDefaultResolverFc                       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deee
ef      fd
ZddZy)r   zThreaded resolver.

    Uses an Executor for synchronous getaddrinfo() calls.
    concurrent.futures.ThreadPoolExecutor is used by default.
    Nloopreturnc                 $    t        |      | _        y N)r   _loop)selfr   s     P/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/resolver.py__init__zThreadedResolver.__init__   s    %d+
    r   hostnameportfamilyc           
      B  K   | j                   j                  ||t        j                  |t        j                         d {   }g }|D ]  \  }}}}}|t        j
                  k(  rat        |      dk  r+|d   rDt        j                  |t        j                  t        j                  z        \  }	}
t        |
      }n#|d d \  }	}n|t        j                  k(  sJ |\  }	}|j                  ||	|||t        j                  t        j                  z  d        |S 7 ڭw)N)typer   flags      r   hostr   r   protor   )r   getaddrinfosocketSOCK_STREAMAI_ADDRCONFIGAF_INET6lengetnameinfoNI_NUMERICHOSTNI_NUMERICSERVintAF_INETappendAI_NUMERICHOSTAI_NUMERICSERV)r   r   r   r   infoshosts_r#   addressr"   _ports              r   resolvezThreadedResolver.resolve   s(     jj,,##&& - 
 
 ,1 	(FAua(w<!# 1: #)"4"4!6!69N9N!N#KD% u:D!(!JD$///$
dLL (  $"#22V5J5JJ	'	< O
s   A DDCDc                    K   y wr    r   s    r   closezThreadedResolver.closeJ   s	     s   r   r   N)__name__
__module____qualname____doc__r   asyncioAbstractEventLoopr   r%   r.   strr-   r   r   r   r7   r;   r9   r   r   r   r      sh    ,Xg&?&?@ ,D , *+&..**#&*47*	d38n	*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deeeef      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y)r   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                     t         t        d      t        |      | _        t        j                  |d|i|| _        t        | j
                  d      s| j                  | _        y y )Nz Resolver requires aiodns libraryr   gethostbyname)	aiodnsRuntimeErrorr   r   DNSResolver	_resolverhasattr_resolve_with_queryr7   )r   r   rE   rF   s       r   r   zAsyncResolver.__init__Q   s]     >ABB%d+
++TGGGt~~733DL 8r   r   r"   r   r   c           
        K   	 | j                   j                  ||       d {   }g }|j                  D ]9  }|j                  ||||dt        j                  t        j                  z  d       ; |st        d      |S 7 ]# t        j                  j                  $ r:}t        |j                        dk\  r|j                  d   nd}t        |      |d }~ww xY ww)Nr	   DNS lookup failedr   r!   )rL   rH   rI   errorDNSErrorr)   rE   OSError	addressesr/   r%   r0   r1   )	r   r"   r   r   respexcmsgr3   r5   s	            r   r7   zAsyncResolver.resolvea   s     	(55dFCCD ~~ 
	GLL $# $#22V5J5JJ	
	 -..) D||$$ 	(!$SXX!!3#((1+9LC#,C'	(s8   CB BB ACB C 5CCCc           
        K   |t         j                  k(  rd}nd}	 | j                  j                  ||       d {   }g }|D ]2  }	|j                  ||	j                  ||dt         j                  d       4 |st        d      |S 7 L# t        j
                  j                  $ r:}t        |j                        dk\  r|j                  d   nd}t        |      |d }~ww xY ww)NAAAAAr	   rP   r   r!   )r%   r(   rL   queryrI   rQ   rR   r)   rE   rS   r/   r"   r0   )
r   r"   r   r   qtyperU   rV   rW   r3   rrs
             r   rN   z!AsyncResolver._resolve_with_query{   s      V__$EE	(--dE::D
  
	BLL $GG $#22	
	 -..+ ;||$$ 	(!$SXX!!3#((1+9LC#,C'	(s9   C$B
 BB
  AC$B
 
C!'5CC!!C$c                 @   K   | j                   j                          y wr   )rL   cancelr:   s    r   r;   zAsyncResolver.close   s     s   r   r<   )r=   r>   r?   r@   r   rA   rB   r   r   r%   r.   rC   r-   r   r   r7   rN   r;   r9   r   r   r   r   N   s    C 594w0014 4 	4
 
4" &'fnn"03	d38n	6 &'fnn"03	d38n	@ r   r   r   )rA   r%   typingr   r   r   r   r   r   abcr
   helpersr   __all__rI   ImportErroraiodns_defaultr   r   _DefaultTyper   __annotations__r9   r   r   <module>rh      s      9 9 ! %
B 7' 7tN $ N b E-)99:;1?EU Ue  Fs   A A%$A%