
    bCi                         % S SK r S SKrS SKJrJrJrJrJrJr  SSK	J
r
  SSKJr  Sr S SKrSr " S S	\
5      r " S
 S\
5      r\\\\4      r\(       a  \O\r\\S'   g! \ a    Sr N=f = f)    N)AnyDictListOptionalTypeUnion   )AbstractResolver)get_running_loop)ThreadedResolverAsyncResolverDefaultResolverFc                       \ rS rSrSrSS\\R                     SS4S jjrS\	R                  4S\S	\S
\S\\\\4      4S jjrSS jrSrg)r      zThreaded resolver.

Uses an Executor for synchronous getaddrinfo() calls.
concurrent.futures.ThreadPoolExecutor is used by default.
Nloopreturnc                 $    [        U5      U l        g N)r   _loop)selfr   s     J/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/resolver.py__init__ThreadedResolver.__init__   s    %d+
    r   hostnameportfamilyc           
      J  #    U R                   R                  UU[        R                  U[        R                  S9I S h  vN n/ nU H  u  p6pvnU[        R
                  :X  ag  [        U5      S:  a  M,  US   (       aD  [        R                  " U[        R                  [        R                  -  5      u  p[        U
5      nO"US S u  pOU[        R                  :X  d   eUu  pUR                  UU	UUU[        R                  [        R                  -  S.5        M     U$  N7f)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   resolveThreadedResolver.resolve   s     jj,,##&& - 
 
 ,1(Fu(w<!# 1: #)"4"4!6!69N9N!N#KD u:D!(!JD$///$
LL (  $"#22V5J5JJ	' -2< O
s   =D#D! C"D#c                    #    g 7fr    r   s    r   closeThreadedResolver.closeJ   s     s   )r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   asyncioAbstractEventLoopr   r'   r0   strr/   r   r   r   r9   r>   __static_attributes__r<   r   r   r   r      sh    ,Xg&?&?@ ,D , *+&..**#&*47*	d38n	*Xr   r   c                       \ rS rSrSr SS\\R                     S\S\SS4S jjr	S	\
R                  4S
\S\S\S\\\\4      4S jjrS	\
R                  4S
\S\S\S\\\\4      4S jjrSS jrSrg)r   N   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                     [         c  [        S5      e[        U5      U l        [         R                  " USU0UD6U l        [        U R
                  S5      (       d  U R                  U l        g g )Nz Resolver requires aiodns libraryr   gethostbyname)	aiodnsRuntimeErrorr   r   DNSResolver	_resolverhasattr_resolve_with_queryr9   )r   r   rL   rM   s       r   r   AsyncResolver.__init__Q   s`     >ABB%d+
++TGGGt~~7733DL 8r   r   r$   r   r   c           
        #     U R                   R                  X5      I S h  vN n/ nUR                   H:  nUR                  UUUUS[        R                  [        R                  -  S.5        M<     U(       d  [        S5      eU$  Nd! [        R                  R                   a;  n[        UR                  5      S:  a  UR                  S   OSn[        U5      UeS nAff = f7f)Nr	   DNS lookup failedr   r#   )rS   rO   rP   errorDNSErrorr+   rL   OSError	addressesr1   r'   r2   r3   )	r   r$   r   r   respexcmsgr5   r7   s	            r   r9   AsyncResolver.resolvea   s     	(55dCCD ~~GLL $# $#22V5J5JJ	 & -..) D||$$ 	(!$SXX!!3#((1+9LC#,C'	(s8   C%B	 BB	 A C%B	 	C"'6CC""C%c           
        #    U[         R                  :X  a  SnOSn U R                  R                  X5      I S h  vN n/ nU H3  n	UR                  UU	R                  UUS[         R                  S.5        M5     U(       d  [        S5      eU$  NS! [        R
                  R                   a;  n[        UR                  5      S:  a  UR                  S   OSn[        U5      UeS nAff = f7f)NAAAAAr	   rX   r   r#   )r'   r*   rS   queryrP   rY   rZ   r+   rL   r[   r1   r$   r2   )
r   r$   r   r   qtyper]   r^   r_   r5   rrs
             r   rU   !AsyncResolver._resolve_with_query{   s      V__$EE	(--d::D
 BLL $GG $#22	  -..+ ;||$$ 	(!$SXX!!3#((1+9LC#,C'	(s9   C-B BB  AC-B C*/6C%%C**C-c                 @   #    U R                   R                  5         g 7fr   )rS   cancelr=   s    r   r>   AsyncResolver.close   s     s   )r   rS   r9   r   r@   )rA   rB   rC   rD   rE   r   rF   rG   r   r   r'   r0   rH   r/   r   r   r9   rU   r>   rI   r<   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   )rF   r'   typingr   r   r   r   r   r   abcr
   helpersr   __all__rP   ImportErroraiodns_defaultr   r   _DefaultTyper   __annotations__r<   r   r   <module>rs      s      9 9 ! %
B 7' 7tN $ N b E-)99:;1?EU Ue  Fs   A   A+*A+