
    Mh                         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dS )	    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dS )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 | _        d S )N)sock_state_cb)r   currentio_looppycaresChannel_sock_state_cbchannelfds)selfs    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/tornado/platform/caresresolver.py
initializezCaresResolver.initialize$   s3    ~''T5HIII    fdreadablewritablec                 J   |rt           j        nd|rt           j        ndz  }|s$| j                            |           | j        |= d S || j        v r'| j                            ||           || j        |<   d S | j                            || j        |           || j        |<   d S )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     (/aH4SFLLRST 	!L''+++48^^L''E222 DHRLLLL$$R)<eDDD DHRLLLr   eventsc                     t           j        }t           j        }|t          j        z  r|}|t          j        z  r|}| j                            ||           d S N)r   ARES_SOCKET_BADr   r!   r"   r   
process_fd)r   r   r(   read_fdwrite_fds        r   r&   zCaresResolver._handle_events5   sX    )*FK 	GFL  	H22222r   r   hostportfamilyz*Generator[Any, Any, List[Tuple[int, Any]]]c              #   6  
K   t          |          r|g}nrt                      
| j                            ||
fd           
V \  }}|r5t	          d|dt
          j                            |          d|          |j        }g }|D ]}d|v rt          j
        }	nd|v rt          j        }	nt          j        }	|t          j        k    r||	k    rt	          d||	fz            |                    t          j        t           |	          ||ff           |S )Nc                 2                         | |f          S r*   )
set_result)resulterrorfuts     r   <lambda>z'CaresResolver.resolve.<locals>.<lambda>H   s    CNNFE?4S4S r   zC-Ares returned error z: z while resolving .:z%Requested socket family %d but got %d)r   r   r   gethostbynameOSErrorr   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 	)II ((CL&&fSSSS   #&IIMFE guugm44U;;;;TTC   (I  	Q 	QGg~~!'!'!'!1)))f.F.F;v~>VV   OOV[n==OPPPPr   )r   N)r   )__name__
__module____qualname____doc__r   rG   boolr   r&   r   	coroutinestrrK    r   r   r   r      s         (   

! 
! 
! 
! 
! 
! 
! 
!3 3c 3d 3 3 3 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      s      % % % % % %       ! ! ! ! ! ! 1 1 1 1 1 1 1 1 	 988888888888888O O O O OH O O O O Or   