
    3 d5                     Z   d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
mZ d dlmZ  ed          Z e
e           G d de                      Z e
e           G d	 d
                      Z ee           G d d                      Z e
e           G d d                      ZdS )    )defer)ThreadedResolver)IHostnameResolverIHostResolutionIResolutionReceiverIResolverSimple)implementerprovider)
LocalCachei'  c                   P     e Zd ZdZ fdZed             Zd Zd fd	Zd Z	 xZ
S )	CachingThreadedResolverza
    Default caching resolver. IPv4 only, supports setting a timeout value for DNS requests.
    c                 p    t                                          |           |t          _        || _        d S N)super__init__dnscachelimittimeout)selfreactor
cache_sizer   	__class__s       /lib/python3.11/site-packages/scrapy/resolver.pyr   z CachingThreadedResolver.__init__   s-    !!!#    c                     |j                             d          r|j                             d          }nd} | |||j                             d                    S )NDNSCACHE_ENABLEDDNSCACHE_SIZEr   DNS_TIMEOUT)settingsgetboolgetintgetfloatclscrawlerr   r   s       r   from_crawlerz$CachingThreadedResolver.from_crawler   s^    ##$677 	 )00AAJJJs7J(8(A(A-(P(PQQQr   c                 :    | j                             |            d S r   )r   installResolverr   s    r   install_on_reactorz*CachingThreadedResolver.install_on_reactor$   s    $$T*****r   Nc                     |t           v rt          j        t           |                   S | j        f}t	                                          ||          }t           j        r|                    | j        |           |S r   )	r   r   succeedr   r   getHostByNamer   addCallback_cache_result)r   namer   dr   s       r   r-   z%CachingThreadedResolver.getHostByName'   sn    8 	1=$000
 </GG!!$00> 	4MM$,d333r   c                     |t           |<   |S r   )r   )r   resultr0   s      r   r/   z%CachingThreadedResolver._cache_result4   s    r   r   )__name__
__module____qualname____doc__r   classmethodr&   r*   r-   r/   __classcell__)r   s   @r   r   r      s             
 R R [R+ + +           r   r   c                       e Zd Zd Zd ZdS )HostResolutionc                     || _         d S r   )r0   )r   r0   s     r   r   zHostResolution.__init__;   s    			r   c                     t                      r   )NotImplementedErrorr)   s    r   cancelzHostResolution.cancel>   s    !###r   N)r4   r5   r6   r   r?    r   r   r;   r;   9   s2          $ $ $ $ $r   r;   c                   &    e Zd Zd Zd Zd Zd ZdS )_CachingResolutionReceiverc                 0    || _         || _        g | _        d S r   )resolutionReceiverhostName	addresses)r   rD   rE   s      r   r   z#_CachingResolutionReceiver.__init__D   s    "4 r   c                 H    | j                             |           || _        d S r   )rD   resolutionBegan
resolution)r   rI   s     r   rH   z*_CachingResolutionReceiver.resolutionBeganI   s$    //
;;;$r   c                 n    | j                             |           | j                            |           d S r   )rD   addressResolvedrF   append)r   addresss     r   rK   z*_CachingResolutionReceiver.addressResolvedM   s5    //888g&&&&&r   c                 r    | j                                          | j        r| j        t          | j        <   d S d S r   )rD   resolutionCompleterF   r   rE   r)   s    r   rO   z-_CachingResolutionReceiver.resolutionCompleteQ   s?    22444> 	5&*nHT]###	5 	5r   N)r4   r5   r6   r   rH   rK   rO   r@   r   r   rB   rB   B   sP          
% % %' ' '5 5 5 5 5r   rB   c                   B    e Zd ZdZd Zed             Zd Z	 	 	 d	dZdS )
CachingHostnameResolverz
    Experimental caching resolver. Resolves IPv4 and IPv6 addresses,
    does not support setting a timeout value for DNS requests.
    c                 D    || _         |j        | _        |t          _        d S r   )r   nameResolveroriginal_resolverr   r   )r   r   r   s      r   r   z CachingHostnameResolver.__init__^   s    !(!5#r   c                     |j                             d          r|j                             d          }nd} | ||          S )Nr   r   r   )r   r    r!   r#   s       r   r&   z$CachingHostnameResolver.from_crawlerc   sK    ##$677 	 )00AAJJJs7J'''r   c                 :    | j                             |            d S r   )r   installNameResolverr)   s    r   r*   z*CachingHostnameResolver.install_on_reactork   s    ((.....r   r   NTCPc                 :   	 t           |         }|                    t          |                     |D ]}|                    |           |                                 |S # t
          $ r/ | j                            t          ||          ||||          cY S w xY wr   )	r   rH   r;   rK   rO   KeyErrorrT   resolveHostNamerB   )r   rD   rE   
portNumberaddressTypestransportSemanticsrF   addrs           r   r[   z'CachingHostnameResolver.resolveHostNamen   s    	& *I ..~h/G/GHHH! 9 9"224888811333%%  	 	 	)99*+=xHH"    	s   A! !6BB)r   NrX   )	r4   r5   r6   r7   r   r8   r&   r*   r[   r@   r   r   rQ   rQ   W   sv         
$ $ $
 ( ( [(/ / /  & & & & & &r   rQ   N)twisted.internetr   twisted.internet.baser   twisted.internet.interfacesr   r   r   r   zope.interface.declarationsr	   r
   scrapy.utils.datatypesr   r   r   r;   rB   rQ   r@   r   r   <module>re      s   " " " " " " 2 2 2 2 2 2            > = = = = = = = - - - - - - :e _$ $ $ $ $. $ $ $N _$ $ $ $ $ $ $ $ 

5 5 5 5 5 5 5 5( -& -& -& -& -& -& -&  -& -& -&r   