
    h%                     n   S r SSKJrJrJrJrJrJrJrJ	r	J
r
  SSKJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SSKJrJr  SSKJr  SSKJr  SS	K J!r!J"r"J#r#J$r$J%r%J&r&  SS
K'J(r(  SSK)J*r*  SSK+J,r,  \(       a  SSK-J.r.  \" \#5       " S S5      5       r/\0" \\/5      r1\0" \/5      \\0" \/5      \\1\0r2\\\\0r3\\S.r4\S\S0r5\\\\\6\7\\\7\64   \\7\6\6\64   4   4      r8\" \"5       " S S5      5       r9\" \"5       " S S5      5       r:\" \%5       " S S5      5       r;\" \&5       " S S5      5       r<g)z=
IPv6-aware hostname resolution.

@see: L{IHostnameResolver}
    )	AF_INETAF_INET6	AF_UNSPEC
SOCK_DGRAMSOCK_STREAMAddressFamily
SocketKindgaierrorgetaddrinfo)	TYPE_CHECKINGCallableListNoReturnOptionalSequenceTupleTypeUnion)implementer)
_idnaBytes)IPv4AddressIPv6Address)Deferred)DNSLookupError)IAddressIHostnameResolverIHostResolutionIReactorThreadsIResolutionReceiverIResolverSimple)deferToThreadPool)Logger)nativeString)
ThreadPoolc                   4    \ rS rSrSrS\4S jrS\4S jrSr	g)	HostResolution9   z1
The in-progress resolution of a given hostname.
namec                     Xl         g)z1
Create a L{HostResolution} with the given name.
Nr(   )selfr(   s     a/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/twisted/internet/_resolver.py__init__HostResolution.__init__?   s	     	    returnc                     [        5       eN)NotImplementedErrorr+   s    r,   cancelHostResolution.cancelE   s    !##r/   r*   N)
__name__
__module____qualname____firstlineno____doc__strr-   r   r5   __static_attributes__ r/   r,   r&   r&   9   s    S $ $r/   r&   )TCPUDPr?   r@   c                       \ rS rSrSrS\4S\S\\/ S4      S\\	\
\
\
/\4   4S jjr   SS	\S
\	S\
S\\\\         S\	S\4S jjrSrg)GAIResolverm   zd
L{IHostnameResolver} implementation that resolves hostnames by calling
L{getaddrinfo} in a thread.
NreactorgetThreadPoolr$   r   c                 H    Xl         Uc  UR                  OUU l        X0l        g)a1  
Create a L{GAIResolver}.

@param reactor: the reactor to schedule result-delivery on
@type reactor: L{IReactorThreads}

@param getThreadPool: a function to retrieve the thread pool to use for
    scheduling name resolutions.  If not supplied, the use the given
    C{reactor}'s thread pool.
@type getThreadPool: 0-argument callable returning a
    L{twisted.python.threadpool.ThreadPool}

@param getaddrinfo: a reference to the L{getaddrinfo} to use - mainly
    parameterized for testing.
@type getaddrinfo: callable with the same signature as L{getaddrinfo}
N)_reactorrE   _getThreadPool_getaddrinfo)r+   rD   rE   r   s       r,   r-   GAIResolver.__init__t   s)    ,  %2%:G!! 	 (r/   resolutionReceiverhostName
portNumberaddressTypestransportSemanticsr0   c                 @  ^ ^^^^^ T R                  5       n[        Uc  [        O
[        U5         m[        U   mS[
        4UUUU U4S jjn[        T R                  Xg5      n[        T5      n	TR                  U	5        UR                  S[
        SS4U4S jj5       n
U	$ )
See L{IHostnameResolver.resolveHostName}

@param resolutionReceiver: see interface

@param hostName: see interface

@param portNumber: see interface

@param addressTypes: see interface

@param transportSemantics: see interface

@return: see interface
Nr0   c                  R   >  TR                  TTT T5      $ ! [         a    / s $ f = fr2   )rI   r
   )addressFamilyrL   rM   r+   
socketTypes   r,   get(GAIResolver.resolveHostName.<locals>.get   s:    ((j-   	s    &&resultc           	         > U  H<  u  pp4n[         U   nTR                  U" [        R                  US5      /UQ76 5        M>     TR	                  5         g Nr?   )	_afToTypeaddressResolved_socktypeToTyperU   resolutionComplete)rW   familysocktypeproto	cannonamesockaddraddrTyperK   s          r,   deliverResults3GAIResolver.resolveHostName.<locals>.deliverResults   sV    @F<%H$V,"22_005AMHM AG
 113r/   )rH   
_typesToAF_any	frozenset_transportToSocket_GETADDRINFO_RESULTr!   rG   r&   resolutionBeganaddCallback)r+   rK   rL   rM   rN   rO   poolrU   d
resolutionrd   rS   rT   s   ````       @@r,   resolveHostNameGAIResolver.resolveHostName   s    . ""$" (Di.E
 ((:;
	( 	 	 dmmT7#H-
**:6	
	4#6 	44 	4 
	4 r/   )rH   rI   rG   r   Nr?   )r7   r8   r9   r:   r;   r   r   r   r   r<   intrj   r-   r   r   r   r   r   rp   r=   r>   r/   r,   rB   rB   m   s     ?CKV	( (  \)9 :;( sCc24GGH	(@ ;?"'2/2 2 	2
 xX782  2 
2 2r/   rB   c                   r    \ rS rSrSr\" 5       rS\4S jr   SS\	S\
S\S	\\\\         S
\
S\4S jjrSrg)SimpleResolverComplexifier   z>
A converter from L{IResolverSimple} to L{IHostnameResolver}.
simpleResolverc                     Xl         g)zG
Construct a L{SimpleResolverComplexifier} with an L{IResolverSimple}.
N_simpleResolver)r+   rw   s     r,   r-   #SimpleResolverComplexifier.__init__   s
      .r/   NrK   rL   rM   rN   rO   r0   c                 b  ^ ^^^  TR                  S5      n[        U5      m[	        T5      nTR                  U5        T R                  R                  T5      R                  UU4S j5      R                  UU 4S j5      R                  U4S j5        U$ ! [         a    [        T5      n Nf = f)rQ   asciic                 <   > TR                  [        SU T5      5      $ rY   )r[   r   )addressrM   rK   s    r,   <lambda><SimpleResolverComplexifier.resolveHostName.<locals>.<lambda>   s     2 B Bw
;!r/   c                    > U R                  [        5      (       a  S $ TR                  R                  SU TTR                  S9$ )Nz'while looking up {name} with {resolver})r(   resolver)checkr   _logfailurerz   )errorrL   r+   s    r,   r   r     sJ    ;;~.. # YY&&=!!11	 ' r/   c                 $   > TR                  5       $ r2   )r]   )nothingrK   s    r,   r   r   
  s    );)N)N)Pr/   )
encodeUnicodeEncodeErrorr   r#   r&   rk   rz   getHostByNamerl   
addErrback)r+   rK   rL   rM   rN   rO   hostName_bytesro   s   ````    r,   rp   *SimpleResolverComplexifier.resolveHostName   s    0	2%__W5N  /#H-
**:6  ..x8[
 Z	 [PQ? " 	2
 (1N	2s   B B.-B.ry   rr   )r7   r8   r9   r:   r;   r"   r   r    r-   r   r<   rs   r   r   r   r   r   rp   r=   r>   r/   r,   ru   ru      sy     8D. . ;?"'9/9 9 	9
 xX789  9 
9 9r/   ru   c                   P    \ rS rSrSrSS jrS\SS4S jrS\SS4S	 jr	SS
 jr
Srg)FirstOneWinsi  zL
An L{IResolutionReceiver} which fires a L{Deferred} with its first result.
c                     Xl         SU l        g)zX
@param deferred: The L{Deferred} to fire when the first resolution
    result arrives.
FN)	_deferred	_resolved)r+   deferreds     r,   r-   FirstOneWins.__init__  s    
 "r/   ro   r0   Nc                     Xl         g)zk
See L{IResolutionReceiver.resolutionBegan}

@param resolution: See L{IResolutionReceiver.resolutionBegan}
N)_resolution)r+   ro   s     r,   rk   FirstOneWins.resolutionBegan  s
     &r/   r   c                     U R                   (       a  gSU l         [        U[        5      (       d   eU R                  R	                  UR
                  5        g)zh
See L{IResolutionReceiver.addressResolved}

@param address: See L{IResolutionReceiver.addressResolved}
NT)r   
isinstancer   r   callbackhost)r+   r   s     r,   r[   FirstOneWins.addressResolved%  s@     >> ';////-r/   c                     U R                   (       a  gU R                  R                  [        U R                  R
                  5      5        g)z/
See L{IResolutionReceiver.resolutionComplete}
N)r   r   errbackr   r   r(   r4   s    r,   r]   FirstOneWins.resolutionComplete3  s1     >>~d.>.>.C.CDEr/   )r   r   r   )r   Deferred[str])r0   N)r7   r8   r9   r:   r;   r-   r   rk   r   r[   r]   r=   r>   r/   r,   r   r     s8    &/ &d &.x .D .Fr/   r   c                   F    \ rS rSrSrS\4S jrSS\S\\	   SS4S	 jjr
S
rg)ComplexResolverSimplifieri<  z=
A converter from L{IHostnameResolver} to L{IResolverSimple}
nameResolverc                     Xl         g)z|
Create a L{ComplexResolverSimplifier} with an L{IHostnameResolver}.

@param nameResolver: The L{IHostnameResolver} to use.
N_nameResolver)r+   r   s     r,   r-   "ComplexResolverSimplifier.__init__B  s
     *r/   r(   timeoutsr0   r   c                 r    [        5       nU R                  R                  [        U5      US[        /5        U$ )z
See L{IResolverSimple.getHostByName}

@param name: see L{IResolverSimple.getHostByName}

@param timeouts: see L{IResolverSimple.getHostByName}

@return: see L{IResolverSimple.getHostByName}
r   )r   r   rp   r   r   )r+   r(   r   rW   s       r,   r   'ComplexResolverSimplifier.getHostByNameJ  s1     #+***<+?q;-Xr/   r   N)r>   )r7   r8   r9   r:   r;   r   r-   r<   r   rs   r   r=   r>   r/   r,   r   r   <  s7    *%6 *# #   r/   r   N)=r;   socketr   r   r   r   r   r   r	   r
   r   typingr   r   r   r   r   r   r   r   r   zope.interfacer   twisted.internet._idnar   twisted.internet.addressr   r   twisted.internet.deferr   twisted.internet.errorr   twisted.internet.interfacesr   r   r   r   r   r    twisted.internet.threadsr!   twisted.loggerr"   twisted.python.compatr#   twisted.python.threadpoolr$   r&   rh   rg   rf   rZ   ri   r\   rs   r<   rj   rB   ru   r   r   r>   r/   r,   <module>r      s  

 
 

 
 
 ' - = + 1  7 ! .4 _$ $ $  +{+, {mg{mh)
 [k	    	eCHouS#sC%7889		;  T T  Tn F F  FR  !)F )F ")FX _  r/   