o
    )Zh                     @   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internetZasyncioreactorZAsyncioSelectorReactorr   nameshostsr	   cacheZCacheResolverclientresolveZResolverChainresolver)selfZhost_resolverZcache_resolverZreal_resolver r   O/var/www/html/lang_env/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   ZabstractZisIPAddresssocketAF_INETZisIPv6AddressAF_INET6r   ZgetHostByNamer   r   ZaddBoth
set_result
isinstancer   FailureraiseExceptionr   errorZDomainErrorIOError	AF_UNSPEC	Exceptiontypingcastint)
r   r   r   r   resolvedZresolved_familydeferredZ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.asyncioreactorr:   r9   r   r   r   r:   o   s   
r:   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)r&   r*   r   sysexc_infor   fr   r   errback   s
   z_.<locals>.errback)r   r   r%   ZaddCallbacksr#   )r=   rB   r   r@   r   _   s   rC   r2   )#r6   r    r>   Ztwisted.internet.abstractr   r;   Ztwisted.internet.deferr   Ztwisted.pythonr   Ztwisted.names.cacheZtwisted.names.clientZtwisted.names.hostsZtwisted.names.resolveZtornado.concurrentr   r   Ztornado.escaper   tornador   Ztornado.netutilr	   r+   TYPE_CHECKINGr
   r   r   r   r   r:   hasattrZconvert_yieldedr<   rC   r   r   r   r   <module>   s0   
H
