
    E#i1                     b   S SK r S SKrS SKrS SKrS SKrS SKJrJr  S SKJ	r	  S SK
JrJrJrJrJrJrJrJr  S SKrSSKJr  SrSr\" S	5      rS
r\R4                  " \5      rSrSr\R>                  \R@                  \RB                  \RD                  \RF                  \RH                  \RJ                  \RL                  \RN                  \RP                  \RR                  \RT                  S.r+\RX                  \RZ                  \R\                  \R^                  \R`                  S.r1 " S S5      r2g)    N)IterableSequence)TracebackType)TYPE_CHECKINGAnyCallableLiteralOptionalTypeVarUnionoverload   )errorz3.5.0)DNSResolverr   _Tzpaiodns needs a SelectorEventLoop on Windows. See more: https://github.com/aio-libs/aiodns#note-for-windows-users   )AAAAAANYCAACNAMEMXNAPTRNSPTRSOASRVTXT)INCHAOSHSNONEr   c                   |   \ rS rSr  SJS\\\      S\\R                     S\	SS4S jjr
S\	S\\\R                  4   4S jr\S\\   4S	 j5       r\R$                  S
\\\\4      SS4S j5       r\S\R.                  \   S\S\\   SS4S j5       rS\S\\\/S4   4   4S jr\ SKS\S\S   S\\   S\R.                  \\R@                        4S jj5       r!\ SKS\S\S   S\\   S\R.                  \\RD                        4S jj5       r!\ SKS\S\S   S\\   S\R.                  \\RF                        4S jj5       r!\ SKS\S\S   S\\   S\R.                  \RH                     4S jj5       r!\ SKS\S\S   S\\   S\R.                  \\RJ                        4S jj5       r!\ SKS\S\S   S\\   S\R.                  \\RL                        4S  jj5       r!\ SKS\S\S!   S\\   S\R.                  \\RN                        4S" jj5       r!\ SKS\S\S#   S\\   S\R.                  \\RP                        4S$ jj5       r!\ SKS\S\S%   S\\   S\R.                  \RR                     4S& jj5       r!\ SKS\S\S'   S\\   S\R.                  \\RT                        4S( jj5       r!\ SKS\S\S)   S\\   S\R.                  \\RV                        4S* jj5       r! SLS\S\S\\   S\\R.                  \\	      \R.                  \	   4   4S+ jjr!S\S,\,RZ                  S\R.                  \R\                     4S- jr/\,R`                  SS.S.S.4S\S,\,RZ                  S/\\   S0\S1\S2\S\R.                  \Rb                     4S3 jjr2 SMS4\\\\4   \\\\\4   4   S2\S\R.                  \Rf                     4S5 jjr4S6\S\R.                  \R\                     4S7 jr5SNS8 jr6S9\S:\S;\SS4S< jr7S9\S=\SS4S> jr8SNS? jr9SNS@ jr:SNSA jr;SNSB jr<SOSC jr=SD\\>\?      SE\\?   SF\\@   SS4SG jrASNSH jrBSIrCg)Pr   ?   Nnameserversloopkwargsreturnc                    SU l         U=(       d    [        R                  " 5       U l        [        (       a  U R                  c   eUR                  SS 5        UR                  SS 5      nX@l        U R                  " S0 UD6u  U l        U l	        U(       a  Xl
        [        5       U l        [        5       U l        S U l        SU l         g )NTsock_state_cbtimeoutF )_closedasyncioget_event_loopr&   r   pop_timeout_make_channel_event_thread_channelr%   set	_read_fds
_write_fds_timer)selfr%   r&   r'   r+   s        I/home/james-whalen/.local/lib/python3.13/site-packages/aiodns/__init__.py__init__DNSResolver.__init__@   s     4G224	=99(((

?D)**Y-,0,>,>,H,H)DM*#&5$'E59    c                 
   [        [        S5      (       a@  [        R                  " 5       (       a&   S[        R                  " SSU R                  S.UD64$ [        R                  S:X  ac  [        U R                  [        R                  5      (       d:   SS Kn[        U R                  UR                  5      (       d  [!        ["        5      e S	[        R                  " SU R&                  U R                  S
.UD64$ ! [        R
                   aP  n[        R                  S:X  a  [        R                  SU5         S nAN[        R                  SU5         S nAGNS nAff = f! [$         a  n[!        ["        5      UeS nAff = f)Nares_threadsafetyT)event_threadr+   linuxzFailed to create DNS resolver channel with automatic monitoring of resolver configuration changes. This usually means the system ran out of inotify watches. Falling back to socket state callback. Consider increasing the system inotify watch limit: %szFailed to create DNS resolver channel with automatic monitoring of resolver configuration changes. Falling back to socket state callback: %swin32r   F)r*   r+   r,   )hasattrpycaresr?   Channelr1   	AresErrorsysplatform_LOGGERwarning
isinstancer&   r.   SelectorEventLoopwinloopLoopRuntimeErrorWINDOWS_SELECTOR_ERR_MSGModuleNotFoundError_sock_state_cb)r9   r'   erM   exs        r:   r2   DNSResolver._make_channelU   s_   G011))++W__ !%t}}@F  ( <<7":IIw00,
 ,
E!$))W\\::&'?@@ ; goo 
--t}}
HN
 
 	
7 $$ <<7*OOH
   OOD 	 2 ' E"#;<"DEs5   $C< 8E# <E *E?EE #
F-E==Fc                 .    U R                   R                  $ Nr4   serversr9   s    r:   r%   DNSResolver.nameservers~   s    }}$$$r=   valuec                 $    XR                   l        g rW   rX   )r9   r\   s     r:   r%   r[      s     %r=   futresulterrornoc                     U R                  5       (       a  g UbD  U R                  [        R                  " U[        R
                  R                  U5      5      5        g U R                  U5        g rW   )	cancelledset_exceptionr   DNSErrorrD   errnostrerror
set_result)r^   r_   r`   s      r:   	_callbackDNSResolver._callback   sQ     ==??w(>(>w(GH NN6"r=   zasyncio.Future[_T]c                    U R                   R                  5       nU R                  (       a9  [        R                  " U R                   R
                  U R                  U5      nX4$ [        R                  " U R                  U5      nX4$ )z?Return a future and a callback to set the result of the future.)r&   create_futurer3   	functoolspartialcall_soon_threadsaferh   )r9   futurecbs      r:   _get_future_callback DNSResolver._get_future_callback   sp    
 &*YY%<%<%>""		..B z ""4>>6:Bzr=   hostqtyper   qclassc                     g rW   r,   r9   rs   rt   ru   s       r:   queryDNSResolver.query   s     =@r=   r   c                     g rW   r,   rw   s       r:   rx   ry      s	     @Cr=   r   c                     g rW   r,   rw   s       r:   rx   ry           ?Br=   r   c                     g rW   r,   rw   s       r:   rx   ry      s     ;>r=   r   c                     g rW   r,   rw   s       r:   rx   ry           >Ar=   r   c                     g rW   r,   rw   s       r:   rx   ry      s	     ADr=   r   c                     g rW   r,   rw   s       r:   rx   ry      r   r=   r   c                     g rW   r,   rw   s       r:   rx   ry      r|   r=   r   c                     g rW   r,   rw   s       r:   rx   ry      s     9<r=   r   c                     g rW   r,   rw   s       r:   rx   ry      r|   r=   r   c                     g rW   r,   rw   s       r:   rx   ry      r|   r=   c                     [         U   nUb
   [        U   nU R	                  5       u  pVU R
                  R                  XXcS9  U$ ! [         a  n[        SU 35      UeS nAff = f! [         a  n[        SU 35      UeS nAff = f)Nzinvalid query type: zinvalid query class: )query_class)query_type_mapKeyError
ValueErrorquery_class_maprq   r4   rx   )r9   rs   rt   ru   rS   r^   rp   s          r:   rx   ry      s    	D"5)E J(0
 ++-D@
  	D3E7;<!C	D
  J #8!ABIJs.   	A 	A' 
A$AA$'
B1B  Bfamilyc                 b    U R                  5       u  p4U R                  R                  XU5        U$ rW   )rq   r4   gethostbyname)r9   rs   r   r^   rp   s        r:   r   DNSResolver.gethostbyname   s-     ++-##D"5
r=   r   portprototypeflagsc           
      b    U R                  5       u  pxU R                  R                  XXXTUS9  U$ )N)r   r   r   r   )rq   r4   getaddrinfo)	r9   rs   r   r   r   r   r   r^   rp   s	            r:   r   DNSResolver.getaddrinfo   s;     ++-!! 	" 	
 
r=   sockaddrc                 b    U R                  5       u  p4U R                  R                  XU5        U$ rW   )rq   r4   getnameinfo)r9   r   r   r^   rp   s        r:   r   DNSResolver.getnameinfo   s-     ++-!!(26
r=   namec                 `    U R                  5       u  p#U R                  R                  X5        U$ rW   )rq   r4   gethostbyaddr)r9   r   r^   rp   s       r:   r   DNSResolver.gethostbyaddr  s+     ++-##D-
r=   c                 8    U R                   R                  5         g rW   )r4   cancelrZ   s    r:   r   DNSResolver.cancel  s    r=   fdreadablewritablec                 L   U(       d  U(       a  U(       aF  U R                   R                  XR                  U[        5        U R                  R                  U5        U(       aF  U R                   R                  XR                  U[        5        U R                  R                  U5        U R                  c  U R                  5         g g XR                  ;   a6  U R                  R                  U5        U R                   R                  U5        XR                  ;   a6  U R                  R                  U5        U R                   R                  U5        U R                  (       dB  U R                  (       d0  U R                  b"  U R                  R                  5         S U l	        g g g g rW   )r&   
add_reader_handle_eventREADr6   add
add_writerWRITEr7   r8   _start_timerdiscardremove_readerremove_writerr   )r9   r   r   r   s       r:   rR   DNSResolver._sock_state_cb  s"   x		$$R););RF""2&		$$R););RG##B'{{"!!# # ^^#&&r*		''+__$''+		''+ NNKK+""$" , ( #r=   eventc                     [         R                  n[         R                  nU[        :X  a  UnOU[        :X  a  UnU R                  R                  X45        g rW   )rD   ARES_SOCKET_BADr   r   r4   
process_fd)r9   r   r   read_fdwrite_fds        r:   r   DNSResolver._handle_event+  sB    ))**D=Ge^H  3r=   c                     U R                   (       d  U R                  (       aI  U R                  R                  [        R
                  [        R
                  5        U R                  5         g S U l        g rW   )r6   r7   r4   r   rD   r   r   r8   rZ   s    r:   	_timer_cbDNSResolver._timer_cb4  sG    >>T__MM$$'')@)@ DKr=   c                     U R                   nUb  US:  d  US:  a  SnOUS:X  a  SnU R                  R                  XR                  5      U l        g )Nr   r   g?)r1   r&   
call_laterr   r8   )r9   r+   s     r:   r   DNSResolver._start_timer=  sG    --?gkWq[G\Gii**7NNCr=   c                 
   U R                   (       a  gSU l         U R                  b!  U R                  R                  5         SU l        [        U R                  5       H  nU R
                  R                  U5        M      [        U R                  5       H  nU R
                  R                  U5        M      U R                  R                  5         U R                  R                  5         U R                  R                  5         g)z:Cleanup timers and file descriptors when closing resolver.NT)r-   r8   r   listr6   r&   r   r7   r   clearr4   close)r9   r   s     r:   _cleanupDNSResolver._cleanupF  s    <<;;"KK DK t~~&BII##B' 't'BII##B' ( 	r=   c                 ,   #    U R                  5         g7f)z
Cleanly close the DNS resolver.

This should be called to ensure all resources are properly released.
After calling close(), the resolver should not be used again.
N)r   rZ   s    r:   r   DNSResolver.close[  s      	s   c                    #    U $ 7f)z Enter the async context manager.r,   rZ   s    r:   
__aenter__DNSResolver.__aenter__d  s
     s   exc_typeexc_valexc_tbc                 @   #    U R                  5       I Sh  vN   g N7f)zExit the async context manager.N)r   )r9   r   r   r   s       r:   	__aexit__DNSResolver.__aexit__h  s      jjls   c                 H    [        U S5      (       a  U R                  5         gg)z6Handle cleanup when the resolver is garbage collected.r4   N)rC   r   rZ   s    r:   __del__DNSResolver.__del__q  s     4$$MMO %r=   )	r4   r-   r3   r6   r1   r8   r7   r&   r%   )NN).rW   )r   )r(   N)r(   r   )D__name__
__module____qualname____firstlineno__r
   r   strr.   AbstractEventLoopr   r;   tupleboolrD   rE   r2   propertyr%   setterr   r   bytesstaticmethodFuturer   intrh   r   rq   r   r	   r   ares_query_a_resultrx   ares_query_aaaa_resultares_query_caa_resultares_query_cname_resultares_query_mx_resultares_query_naptr_resultares_query_ns_resultares_query_ptr_resultares_query_soa_resultares_query_srv_resultares_query_txt_resultsocketAddressFamilyares_host_resultr   	AF_UNSPECares_addrinfo_resultr   ares_nameinfo_resultr   r   r   rR   r   r   r   r   r   r   r   BaseExceptionr   r   r   __static_attributes__r,   r=   r:   r   r   ?   s    0448hsm, w001 	
 
*'
c '
eD'//4I.J '
R %Xc] % % &%U
*;!< & & & 
#^^B
#)+
#6>sm
#	
# 
#	#Xr3io%>>	?  FI@@ '@6>sm@	W889	:@ @ ILCC 'C9A#C	W;;<	=C C HKBB 'B8@B	W::;	<B B JM>> ' 0>:B3->	77	8> > GJAA 'A7?}A	W99:	;A A JMDD ' 0D:B3-D	W<<=	>D D GJAA 'A7?}A	W99:	;A A HKBB 'B8@B	W::;	<B B HK<< '<8@<	55	6< < HKBB 'B8@B	W::;	<B B HKBB 'B8@B	W::;	<B B
 >B #-5c]	w~~d3i('..*==	>$!'!5!5	00	1 (.'7'7" $$ sm	
    
44	5& c3hsCc/A)BBC  
44	5		00	1# # # # #84 4C 4D 4D*4./ -( '	
 
r=   r   )3r.   rl   loggingr   rG   collections.abcr   r   typesr   typingr   r   r   r	   r
   r   r   r   rD    r   __version____all__r   rP   	getLoggerr   rI   r   r   QUERY_TYPE_AQUERY_TYPE_AAAAQUERY_TYPE_ANYQUERY_TYPE_CAAQUERY_TYPE_CNAMEQUERY_TYPE_MXQUERY_TYPE_NAPTRQUERY_TYPE_NSQUERY_TYPE_PTRQUERY_TYPE_SOAQUERY_TYPE_SRVQUERY_TYPE_TXTr   QUERY_CLASS_INQUERY_CLASS_CHAOSQUERY_CLASS_HSQUERY_CLASS_NONEQUERY_CLASS_ANYr   r   r,   r=   r:   <module>r     s"       
 . 	 	 	  
"T]@ 
 

H
%	 
		##!!!!%%


%%


!!!!!!!!  
 
 &&

 
 $$""y yr=   