
    2h/'                        % S SK r S SKrS SKrS SKJrJrJrJrJrJ	r	J
r
Jr  SSKJrJr  Sr S SKr\" \R$                  S5      r\R*                  \R,                  -  r\R0                  \R2                  -  r\R6                  r\" \S5      (       a  \\R:                  -  r " S	 S
\5      r " S S\5      r " S S5      r \
\\\4      r!\(       a  \O\r"\!\#S'   g! \ a    SrSr Nf = f)    N)AnyDictFinalListOptionalTupleTypeUnion   )AbstractResolverResolveResult)ThreadedResolverAsyncResolverDefaultResolvergetaddrinfoFAI_MASKc            
           \ rS rSrSrSS\\R                     SS4S jjrS\	R                  4S\S	\S
\	R                  S\\   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                 J    U=(       d    [         R                  " 5       U l        g N)asyncioget_running_loop_loop)selfr   s     H/var/www/auris/envauris/lib/python3.13/site-packages/aiohttp/resolver.py__init__ThreadedResolver.__init__"   s    7W557
    r   hostportfamilyc                   #    U R                   R                  UU[        R                  U[        S9I S h  vN n/ nU H  u  p6pvnU[        R
                  :X  aY  [        U5      S:  a  M,  US   (       a6  U R                   R                  U[        5      I S h  vN 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[        S95        M     U$  N N]7f)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   resolveThreadedResolver.resolve%   s     jj,,##  - 
 
 &(,1(Fu(w<!# 1: 261G1G!32 ,(M u:D*1"1+'M4///&-#LL!&!/	' -2< O
&,s#   3C7C3A!C7C5AC75C7c                    #    g 7fr    r   s    r   closeThreadedResolver.closeQ   s     s   )r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r   AbstractEventLoopr   r,   r4   strr3   AddressFamilyr   r   r=   rB   __static_attributes__r@   r    r   r   r      sf    8Xg&?&?@ 8D 8 &'v~~**"*060D0D*	m	*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\
R                  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   U   z9Use the `aiodns` package to make asynchronous DNS lookupsNr   argskwargsr   c                    [         c  [        S5      eU=(       d    [        R                  " 5       U l        S U l        U(       d  U(       a  [         R                  " U0 UD6U l        g [        5       U l        U R
                  R                  X R                  5      U l        [        U R                  S5      (       d  U R                  U l        g g )Nz Resolver requires aiodns librarygethostbyname)aiodnsRuntimeErrorr   r   r   _managerDNSResolver	_resolver_DNSResolverManagerget_resolverhasattr_resolve_with_queryr=   )r   r   rP   rQ   s       r   r   AsyncResolver.__init__X   s     >ABB7W557
7; 6#//@@DN+-33D**Et~~7733DL 8r    r   r!   r"   r#   c                   #     U R                   R                  UU[        R                  U[        S9I S h  vN n/ nUR                   GH  nUR                  n	UR                  nU[        R                  :X  a  [        U	5      S:  aX  U	S   (       aN  U R                   R                  U	S   R!                  S5      /U	SS  Q7["        5      I S h  vN n
U
R$                  nOIU	S   R!                  S5      nU	S   nO/U[        R&                  :X  d   eU	S   R!                  S5      nU	S   nUR)                  [+        UUUUS[,        S95        GM     U(       d  [        S S5      eU$  GN.! [
        R                  R                   a<  n[        UR                  5      S:  a  UR                  S   OSn[        S U5      UeS nAff = f N7f)N)r"   r%   r#   r&   r   DNS lookup failedr'   r   asciir)   )rX   r   r,   r-   r.   rT   errorDNSErrorr0   rP   OSErrornodesaddrr#   r/   r1   decoder2   noder4   r5   r   r6   )r   r!   r"   r#   respexcmsgr8   rg   r:   resultr;   s               r   r=   AsyncResolver.resolveq   s    
	.33''$ 4  D &(JJDMQYYG[[F(w<!#
 $(>>#=#= **73BgabkB*$ F %+KKM$+AJ$5$5g$>M"1:D/// '
 1 1' :qzLL!&!/	) > $ 344[ ||$$ 	.!$SXX!!3#((1+9LC$$#-	.sE   G2E' E$E' BGGBG$E' 'G7F<<GGc           
        #    U[         R                  :X  a  S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 S5      eU$  NT! [        R
                  R                   a<  n[        UR                  5      S:  a  UR                  S   OSn[        S U5      UeS nAff = f7f)NAAAAAr   r_   r   r)   )r,   r/   rX   queryrT   ra   rb   r0   rP   rc   r5   r!   AI_NUMERICHOST)
r   r!   r"   r#   qtyperh   ri   rj   r8   rrs
             r   r\   !AsyncResolver._resolve_with_query   s      "(6??!:v	.--d::D
 BLL $GG $#22	  $ 344+ ;||$$ 	.!$SXX!!3#((1+9LC$$#-	.s8   C.B BB AC.B C+/7C&&C++C.c                    #    U R                   (       a4  U R                   R                  X R                  5        S U l         S U l        g U R                  b  U R                  R	                  5         S U l        g 7fr   )rV   release_resolverr   rX   cancelrA   s    r   rB   AsyncResolver.close   sT     ==MM**4< DM!DN>>%NN!!#s   A5A7)r   rV   rX   r=   r   rD   )rE   rF   rG   rH   rI   r   r   rJ   r   r   r,   r4   rK   r3   rL   r   r   r=   r   r\   rB   rM   r@   r    r   r   r   U   s    C 594w0014 4 	4
 
44 &'v~~11"1060D0D1	m	1h &'fnn"03	d38n	:
r    r   c                      ^  \ rS rSr% SrSr\S    \S'   SU 4S jjrSS jr	SS	S
\
R                  SS4S jrSS	S
\
R                  SS4S jrSrU =r$ )rY      zManager for aiodns.DNSResolver objects.

This class manages shared aiodns.DNSResolver instances
with no custom arguments across different event loops.
N	_instancer   c                    > U R                   c.  [        TU ]	  U 5      U l         U R                   R                  5         U R                   $ r   )r{   super__new___init)cls	__class__s    r   r~   _DNSResolverManager.__new__   s7    == !GOC0CMMM!}}r    c                 8    [         R                  " 5       U l        g r   )weakrefWeakKeyDictionary
_loop_datarA   s    r   r   _DNSResolverManager._init   s    
 %%' 	r    clientr   r   zaiodns.DNSResolverc                     X R                   ;  a:  [        R                  " US9n[        R                  " 5       nX44U R                   U'   OU R                   U   u  p4UR                  U5        U$ )zGet 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   )r   rT   rW   r   WeakSetadd)r   r   r   resolver
client_sets        r   rZ    _DNSResolverManager.get_resolver   sa     &))t4H;B??;LJ%-$:DOOD! $(??4#8 H 	vr    c                     U R                   R                  U5      nUc  gUu  pEUR                  U5        U(       d!  Ub  UR                  5         U R                   U	 gg)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)r   getdiscardrw   )r   r   r   current_loop_datar   r   s         r   rv   $_DNSResolverManager.release_resolver   s\     !OO//5$06"#!% r    )r   )r   rY   rD   )rE   rF   rG   rH   rI   r{   r   __annotations__r~   r   r   rJ   rZ   rv   rM   __classcell__)r   s   @r   rY   rY      so     26Ix-.5(%-4-F-F	.&%&-4-F-F&	& &r    rY   r   )$r   r,   r   typingr   r   r   r   r   r   r	   r
   abcr   r   __all__rT   r[   rW   aiodns_defaultImportErrorrq   AI_NUMERICSERVr6   NI_NUMERICHOSTNI_NUMERICSERVr2   AI_ADDRCONFIGr.   r   r   r   rY   _DefaultTyper   r   r@   r    r   <module>r      s       G G G 0
BV//?N --0E0EE **V-B-BB %%
69fnn$N7' 7tv$ vr@& @&F E-)99:;1?EU UG  FNs   C 
C'&C'