
    3 dy                     `    d dl Z d dlmZ d dlmZ  e j        e          Z G d d          ZdS )    N)signals)NotConfiguredc                   T    e Zd Zd Zed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
S )AutoThrottlec                 ~   || _         |j                            d          st          |j                            d          | _        |j                            d          | _        |j                            | j	        t          j
                   |j                            | j        t          j                   d S )NAUTOTHROTTLE_ENABLEDAUTOTHROTTLE_DEBUGAUTOTHROTTLE_TARGET_CONCURRENCY)signal)crawlersettingsgetboolr   debuggetfloattarget_concurrencyr   connect_spider_openedspider_opened_response_downloadedresponse_downloaded)selfr   s     :lib/python3.11/site-packages/scrapy/extensions/throttle.py__init__zAutoThrottle.__init__
   s    ''(>?? 	 %--.BCC
")"2";";-#
 #
 	 3G<QRRR%g.I 	  	
 	
 	
 	
 	
    c                      | |          S N )clsr   s     r   from_crawlerzAutoThrottle.from_crawler   s    s7||r   c                     |                      |          | _        |                     |          | _        |                     |          |_        d S r   )
_min_delaymindelay
_max_delaymaxdelay_start_delaydownload_delayr   spiders     r   r   zAutoThrottle._spider_opened   sD    //// $ 1 1& 9 9r   c                 b    | j         j        }t          |d|                    d                    S )Nr&   DOWNLOAD_DELAY)r   r   getattrr   )r   r(   ss      r   r!   zAutoThrottle._min_delay!   s,    L!v/<L1M1MNNNr   c                 @    | j         j                            d          S )NAUTOTHROTTLE_MAX_DELAY)r   r   r   r'   s     r   r#   zAutoThrottle._max_delay%   s    |$--.FGGGr   c                 f    t          | j        | j        j                            d                    S )NAUTOTHROTTLE_START_DELAY)maxr"   r   r   r   r'   s     r   r%   zAutoThrottle._start_delay(   s/    M4<099:TUU
 
 	
r   c           
         |                      ||          \  }}|j                            d          }||d S |j        }|                     |||           | j        rh|j        |z
  }t          |j                  }	t          |j                  }
t          
                    d||
|j        dz  |dz  |dz  |	dd|i           d S d S )Ndownload_latencyz~slot: %(slot)s | conc:%(concurrency)2d | delay:%(delay)5d ms (%(delaydiff)+d) | latency:%(latency)5d ms | size:%(size)6d bytesi  )slotconcurrencydelay	delaydifflatencysizer(   )extra)	_get_slotmetagetr6   _adjust_delayr   lenbodytransferringloggerinfo)r   responserequestr(   keyr4   r8   olddelaydiffr9   concs              r   r   z!AutoThrottle._response_downloaded-   s   NN7F33	T,""#566 	d 	F:4(333: 	:(Dx}%%Dt())DKKA  #'!Z$.!%&~    (      		 	r   c                     |j                             d          }|| j        j        j        j                            |          fS )Ndownload_slot)r<   r=   r   engine
downloaderslots)r   rE   r(   rF   s       r   r;   zAutoThrottle._get_slotH   s;    l//DL'28<<SAAAAr   c                     || j         z  }|j        |z   dz  }t          ||          }t          t          | j        |          | j                  }|j        dk    r||j        k    rdS ||_        dS )zDefine delay adjustment policyg       @   N)r   r6   r1   minr"   r$   status)r   r4   r8   rD   target_delay	new_delays         r   r>   zAutoThrottle._adjust_delayL   s     !88 Z,.#5	 i00	 DM955t}EE	 ?c! 	i4:&= 	F


r   N)__name__
__module____qualname__r   classmethodr   r   r!   r#   r%   r   r;   r>   r   r   r   r   r   	   s        
 
 
   [: : :
O O OH H H
 
 

  6B B B    r   r   )	loggingscrapyr   scrapy.exceptionsr   	getLoggerrU   rB   r   r   r   r   <module>r]      s           + + + + + +		8	$	$\ \ \ \ \ \ \ \ \ \r   