
    g                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlZej                  rd dlmZmZmZmZmZ  G d de	      Zy)	    N)Future)gen)IOLoop)Resolveris_valid_ip)	GeneratorAnyListTupleDictc            
       ~    e Zd ZdZddZdedededdfdZded	eddfd
Ze	j                  	 ddedededdfd       Zy)CaresResolvera  Name resolver based on the c-ares library.

    This is a non-blocking and non-threaded resolver.  It may not produce the
    same results as the system resolver, but can be used for non-blocking
    resolution when threads cannot be used.

    ``pycares`` will not return a mix of ``AF_INET`` and ``AF_INET6`` when
    ``family`` is ``AF_UNSPEC``, so it is only recommended for use in
    ``AF_INET`` (i.e. IPv4).  This is the default for
    ``tornado.simple_httpclient``, but other libraries may default to
    ``AF_UNSPEC``.

    .. versionchanged:: 5.0
       The ``io_loop`` argument (deprecated since version 4.1) has been removed.

    .. deprecated:: 6.2
       This class is deprecated and will be removed in Tornado 7.0. Use the default
       thread-based resolver instead.
    returnNc                     t        j                         | _        t        j                  | j
                        | _        i | _        y )N)sock_state_cb)r   currentio_looppycaresChannel_sock_state_cbchannelfds)selfs    S/var/www/openai/venv/lib/python3.12/site-packages/tornado/platform/caresresolver.py
initializezCaresResolver.initialize$   s-    ~~'T5H5HI    fdreadablewritablec                    |rt         j                  nd|rt         j                  ndz  }|s)| j                  j	                  |       | j
                  |= y || j
                  v r,| j                  j                  ||       || j
                  |<   y | j                  j                  || j                  |       || j
                  |<   y )Nr   )	r   READWRITEr   remove_handlerr   update_handleradd_handler_handle_events)r   r   r   r   states        r   r   zCaresResolver._sock_state_cb)   s     (aHFLLRSTLL''+488^LL''E2 DHHRLLL$$R)<)<eD DHHRLr   eventsc                     t         j                  }t         j                  }|t        j                  z  r|}|t        j                  z  r|}| j
                  j                  ||       y N)r   ARES_SOCKET_BADr   r!   r"   r   
process_fd)r   r   r(   read_fdwrite_fds        r   r&   zCaresResolver._handle_events5   sN    ))**FKKGFLL H2r   hostportfamilyz*Generator[Any, Any, List[Tuple[int, Any]]]c              #   >  
K   t        |      r|g}npt               
| j                  j                  ||
fd       
\  }}|r1t	        d|dt
        j                  j                  |      d|      |j                  }g }|D ]  }d|v rt        j                  }	n%d|v rt        j                  }	nt        j                  }	|t        j                  k7  r||	k7  rt	        d||	fz        |j                  t        j                  t         |	      ||ff        |S w)Nc                 *    j                  | |f      S r*   )
set_result)resulterrorfuts     r   <lambda>z'CaresResolver.resolve.<locals>.<lambda>H   s    CNNFE?4Sr   zC-Ares returned error z: z while resolving .:z%Requested socket family %d but got %d)r   r   r   gethostbynameIOErrorr   errnostrerror	addressessocketAF_INETAF_INET6	AF_UNSPECappendtypingcastint)r   r/   r0   r1   r?   r5   r6   addrinfoaddressaddress_familyr7   s             @r   resolvezCaresResolver.resolve>   s     tI (CLL&&fS #&IMFEgmm44U;TC  ((I Gg~!'!'!'!1!1)))f.F;v~>VV  OOV[[n=OP ! s   DD)r   N)r   )__name__
__module____qualname____doc__r   rG   boolr   r&   r   	coroutinestrrK    r   r   r   r      s    (

! 
! 
! 
! 
!3 3c 3d 3 	]]23",/	5 r   r   )r   r@   tornado.concurrentr   tornador   tornado.ioloopr   tornado.netutilr   r   rE   TYPE_CHECKINGr   r	   r
   r   r   r   rS   r   r   <module>rY      s7      %  ! 1 	88OH Or   