
    !h                    x   % S SK Jr  S SKJrJr  S SKJr  S SKJrJ	r	  S SK
JrJrJrJrJr  S SKJrJr  S SKJr  \(       a  S SKJr  S S	KJr  S S
KJr  S SKJr  \" S5      rS\S'   \" \5       " S S\	5      5       r\" \5       " S S5      5       r \" \5       " S S5      5       r!\" \5       " S S5      5       r"g)    )annotations)TYPE_CHECKINGAny)defer)ReactorBaseThreadedResolver)IAddressIHostnameResolverIHostResolutionIResolutionReceiverIResolverSimple)implementerprovider)
LocalCache)Sequence)Deferred)Self)Crawleri'  zLocalCache[str, Any]dnscachec                  l   ^  \ rS rSrSrS	U 4S jjr\S
S j5       rSS jrSSU 4S jjjr	SS jr
SrU =r$ )CachingThreadedResolver    zY
Default caching resolver. IPv4 only, supports setting a timeout value for DNS requests.
c                F   > [         TU ]  U5        U[        l        X0l        g N)super__init__r   limittimeout)selfreactor
cache_sizer   	__class__s       V/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/resolver.pyr    CachingThreadedResolver.__init__&   s    !#    c                    UR                   R                  S5      (       a  UR                   R                  S5      nOSnU " X#UR                   R                  S5      5      $ )NDNSCACHE_ENABLEDDNSCACHE_SIZEr   DNS_TIMEOUT)settingsgetboolgetintgetfloatclscrawlerr    r!   s       r#   from_crawler$CachingThreadedResolver.from_crawler+   sS    ##$677 ))00AJJ7(8(8(A(A-(PQQr%   c                :    U R                   R                  U 5        g r   )r    installResolverr   s    r#   install_on_reactor*CachingThreadedResolver.install_on_reactor3   s    $$T*r%   c                   > U[         ;   a  [        R                  " [         U   5      $ U R                  4n[        TU ]  X5      n[         R                  (       a  UR                  U R                  U5        U$ r   )	r   r   succeedr   r   getHostByNamer   addCallback_cache_result)r   namer   dr"   s       r#   r:   %CachingThreadedResolver.getHostByName6   sZ    8==$00 <</G!$0>>MM$,,d3r%   c                    U[         U'   U$ r   )r   )r   resultr=   s      r#   r<   %CachingThreadedResolver._cache_resultD   s    r%   )r   )r    r   r!   intr   floatr0   r   r    r   returnr   rF   None) )r=   strr   zSequence[int]rF   zDeferred[str])rA   r   r=   rJ   rF   r   )__name__
__module____qualname____firstlineno____doc__r   classmethodr1   r6   r:   r<   __static_attributes____classcell__)r"   s   @r#   r   r       s<    
 R R+  r%   r   c                  (    \ rS rSrSS jrSS jrSrg)HostResolutionI   c                    Xl         g r   r=   )r   r=   s     r#   r   HostResolution.__init__K   s    	r%   c                    [         er   )NotImplementedErrorr5   s    r#   cancelHostResolution.cancelN   s    !!r%   rW   N)r=   rJ   rG   )rK   rL   rM   rN   r   r[   rQ   rI   r%   r#   rT   rT   I   s    "r%   rT   c                  <    \ rS rSrSS jrS	S jrS
S jrSS jrSrg)_CachingResolutionReceiverR   c                *    Xl         X l        / U l        g r   )resolutionReceiverhostName	addresses)r   ra   rb   s      r#   r   #_CachingResolutionReceiver.__init__T   s    7I%)+r%   c                F    U R                   R                  U5        Xl        g r   )ra   resolutionBegan
resolution)r   rg   s     r#   rf   *_CachingResolutionReceiver.resolutionBeganY   s    //
;$r%   c                p    U R                   R                  U5        U R                  R                  U5        g r   )ra   addressResolvedrc   append)r   addresss     r#   rj   *_CachingResolutionReceiver.addressResolved]   s(    //8g&r%   c                    U R                   R                  5         U R                  (       a  U R                  [        U R                  '   g g r   )ra   resolutionCompleterc   r   rb   r5   s    r#   ro   -_CachingResolutionReceiver.resolutionCompletea   s2    224>>&*nnHT]]# r%   )rc   rb   rg   ra   N)ra   r   rb   rJ   )rg   r   rF   rH   )rl   r	   rF   rH   rG   )	rK   rL   rM   rN   r   rf   rj   ro   rQ   rI   r%   r#   r^   r^   R   s    ,
%'5r%   r^   c                  j    \ rS rSrSrS	S jr\S
S j5       rSS jr   S           SS jjr	Sr
g)CachingHostnameResolverg   z}
Experimental caching resolver. Resolves IPv4 and IPv6 addresses,
does not support setting a timeout value for DNS requests.
c                H    Xl         UR                  U l        U[        l        g r   )r    nameResolveroriginal_resolverr   r   )r   r    r!   s      r#   r    CachingHostnameResolver.__init__n   s    $+4;4H4H#r%   c                    UR                   R                  S5      (       a  UR                   R                  S5      nOSnU " X#5      $ )Nr'   r(   r   )r*   r+   r,   r.   s       r#   r1   $CachingHostnameResolver.from_crawlers   s@    ##$677 ))00AJJ7''r%   c                :    U R                   R                  U 5        g r   )r    installNameResolverr5   s    r#   r6   *CachingHostnameResolver.install_on_reactor{   s    ((.r%   Nc                    [         U   nUR                  [        U5      5        U H  nUR                  U5        M     UR                  5         U$ ! [         a+    U R                  R                  [	        X5      UUUU5      s $ f = fr   )	r   KeyErrorrv   resolveHostNamer^   rf   rT   rj   ro   )r   ra   rb   
portNumberaddressTypestransportSemanticsrc   addrs           r#   r   'CachingHostnameResolver.resolveHostName~   s    		 *I 	**>(+CDD..t4 --/!!  	))99*+=H" 	s   	A 2BB)rv   r    )r    r   r!   rC   rE   rG   )r   NTCP)ra   r   rb   rJ   r   rC   r   zSequence[type[IAddress]] | Noner   rJ   rF   r   )rK   rL   rM   rN   rO   r   rP   r1   r6   r   rQ   rI   r%   r#   rr   rr   g   st    
$
 ( (/ 8<"'"/" " 	"
 6"  " 
" "r%   rr   N)#
__future__r   typingr   r   twisted.internetr   twisted.internet.baser   r   twisted.internet.interfacesr	   r
   r   r   r   zope.interface.declarationsr   r   scrapy.utils.datatypesr   collections.abcr   twisted.internet.deferr   typing_extensionsr   scrapy.crawlerr   r   __annotations__r   rT   r^   rr   rI   r%   r#   <module>r      s    " % " ?  > -(/ '& ",E!2
 2 _%. % %P _" " " 

5 5 5( ," ,"  ,"r%   