
    [4%e                     ^   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e          ZddZ eej         d          r*ej         !                    e          dedef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            
       P    e Zd ZdZddZej        	 ddedededd	f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                    t           j        j                                        | _        t           j        j                            d          }t           j        j        	                    | j                  }t           j        j
                            d| j                  }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_resolvers       8lib/python3.11/site-packages/tornado/platform/twisted.py
initializezTwistedResolver.initialize=   s     '6MMOO+44\BB ,::4<:PP,55 6 
 
  -;;NM:
 
    r   hostportfamilyz*Generator[Any, Any, List[Tuple[int, Any]]]c              #     K   t           j        j                            |          r|}t          j        }nUt           j        j                            |          r|}t          j        }n!| j        	                    t          |                    }t                      }|                    |j                   |V }t          |t          j                  rF	 |                                 n# t           j        j        j        $ r}t+          |          d }~ww xY wt           j        j                            |          rt          j        }n=t           j        j                            |          rt          j        }nt          j        }|t          j        k    r||k    rt/          d||fz            t1          j        t4          |          ||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results
             r#   r   zTwistedResolver.resolveK   s      $0066 	3H$nOO&44T:: 	3H$oOO}224::>>H((CS^,,, yyH(GO44 
3%++----}*6 % % %!!**$%!*66x@@ 3"(.!*88BB 3"(/"("2V%%%&O*C*C76?:SS   ;sO44x6FGHs   C. .DDDr   N)r   )
__name__
__module____qualname____doc__r$   r   	coroutinestrr=   r    r%   r#   r   r   '   s|         *
 
 
 
 	]23    " ,/ 	5      ]     r%   r   r   c                  &    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.asyncioreactorrN   rM   s    r#   rN   rN   o   s%    & 877777GIIIIIr%   registerdc                     t                      dt          j        dd ffd}|                     j        |           S )Nr   r   c                     	  | j                      t          d          #  t          t          j                               Y d S xY w)Nzerrback called without error)r5   r:   r   sysexc_info)r   fs    r#   errbackz_.<locals>.errback   sP    7&&((( >???7#As|~~666666s	   ! #A)r   r   r4   addCallbacksr2   )rQ   rW   rV   s     @r#   _rY      sW    HH	7W_ 	7 	7 	7 	7 	7 	7 	7 	
q|W---r%   rD   )#rH   r,   rT   twisted.internet.abstractr   rO   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	   r;   TYPE_CHECKINGr
   r   r   r   r   rN   hasattrconvert_yieldedrP   rY   rK   r%   r#   <module>rh      s     



         & & & & + + + + + + " " " " " "                 ; : : : : : : :             $ $ $ $ $ $ 	 3222222222222E E E E Eh E E EP   0 73
++ !!(++X &    ,+   r%   