o
    h                     @   s  d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
ZddlZddlZddlZddlmZmZ ddlmZ ddlmZ ddlmZ ddlZejr[dd	lmZmZmZmZ G d
d deZdddZeej drej !ededefddZ"dS dS )z1Bridges between the Twisted package and Tornado.
    N)Deferredfailure)Futurefuture_set_exc_info)utf8)gen)Resolver)	GeneratorAnyListTuplec                
   @   s>   e Zd ZdZdddZej	ddeded	edd
fddZ	dS )TwistedResolvera  Twisted-based asynchronous resolver.

    This is a non-blocking and non-threaded resolver.  It is
    recommended only when threads cannot be used, since it has
    limitations compared to the standard ``getaddrinfo``-based
    `~tornado.netutil.Resolver` and
    `~tornado.netutil.DefaultExecutorResolver`.  Specifically, it returns at
    most one result, and arguments other than ``host`` and ``family``
    are ignored.  It may fail to resolve when ``family`` is not
    ``socket.AF_UNSPEC``.

    Requires Twisted 12.1 or newer.

    .. 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                 C   s\   t jj | _t jjd}t jjj	| jd}t jj
jd| jd}t jj|||g| _d S )Nz
/etc/hosts)reactorz/etc/resolv.conf)twistedinternetasyncioreactorAsyncioSelectorReactorr   nameshostsr	   cacheCacheResolverclientresolveResolverChainresolver)selfhost_resolvercache_resolverreal_resolver r!   L/var/www/vscode/kcb/lib/python3.10/site-packages/tornado/platform/twisted.py
initialize=   s   
zTwistedResolver.initializer   hostportfamilyz*Generator[Any, Any, List[Tuple[int, Any]]]c           
   
   c   s   t jj|r|}tj}nZt jj|r|}tj}nM| j	t
|}t }||j |V }t|tjrOz|  W n, t jjjyN } zt|d }~ww t jj|rZtj}nt jj|retj}ntj}|tjkry||krytd||f tt|||ffg}	|	S )Nz%Requested socket family %d but got %d)r   r   abstractisIPAddresssocketAF_INETisIPv6AddressAF_INET6r   getHostByNamer   r   addBoth
set_result
isinstancer   FailureraiseExceptionr   errorDomainErrorIOError	AF_UNSPEC	Exceptiontypingcastint)
r   r$   r%   r&   resolvedresolved_familydeferredfuteresultr!   r!   r"   r   K   s:   
zTwistedResolver.resolver   N)r   )
__name__
__module____qualname____doc__r#   r   	coroutinestrr:   r   r!   r!   r!   r"   r   '   s    
r   r   c                  C   s   ddl m}  |   dS )a  Install ``AsyncioSelectorReactor`` as the default Twisted reactor.

    .. deprecated:: 5.1

       This function is provided for backwards compatibility; code
       that does not require compatibility with older versions of
       Tornado should use
       ``twisted.internet.asyncioreactor.install()`` directly.

    .. versionchanged:: 6.0.3

       In Tornado 5.x and before, this function installed a reactor
       based on the Tornado ``IOLoop``. When that reactor
       implementation was removed in Tornado 6.0.0, this function was
       removed as well. It was restored in Tornado 6.0.3 using the
       ``asyncio`` reactor instead.

    r   installN)twisted.internet.asyncioreactorrI   rH   r!   r!   r"   rI   o   s   
rI   registerdc                    s0   t   dtjdd f fdd}|  j|  S )Nr   r   c                    s,   z|    td   t t  Y d S )Nzerrback called without error)r2   r7   r   sysexc_infor   fr!   r"   errback   s
   z_.<locals>.errback)r   r   r1   addCallbacksr/   )rL   rQ   r!   rO   r"   _   s   rS   rA   )#rE   r)   rM   twisted.internet.abstractr   rJ   twisted.internet.deferr   twisted.pythonr   twisted.names.cachetwisted.names.clienttwisted.names.hoststwisted.names.resolvetornado.concurrentr   r   tornado.escaper   tornador   tornado.netutilr	   r8   TYPE_CHECKINGr
   r   r   r   r   rI   hasattrconvert_yieldedrK   rS   r!   r!   r!   r"   <module>   s0   
H
