This commit is contained in:
DenisC 2026-07-14 09:50:56 +02:00 committed by GitHub
commit efb22c92ab
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 12 additions and 6 deletions

View File

@ -84,8 +84,11 @@ def _get_concurrency_delay(
concurrency: int, spider: Spider, settings: BaseSettings
) -> tuple[int, float]:
delay: float = settings.getfloat("DOWNLOAD_DELAY")
if hasattr(spider, "download_delay"):
if hasattr(spider, "download_delay"): # pragma: no cover
warn_on_deprecated_spider_attribute("download_delay", "DOWNLOAD_DELAY")
delay = spider.download_delay
if settings.getbool("AUTOTHROTTLE_ENABLED"):
delay = max(delay, settings.getfloat("AUTOTHROTTLE_START_DELAY"))
if hasattr(spider, "max_concurrent_requests"): # pragma: no cover
warn_on_deprecated_spider_attribute(

View File

@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
from scrapy import Request, Spider, signals
from scrapy.exceptions import NotConfigured
from scrapy.utils.deprecate import warn_on_deprecated_spider_attribute
if TYPE_CHECKING:
# typing.Self requires Python 3.11
@ -45,18 +46,20 @@ class AutoThrottle:
def _spider_opened(self, spider: Spider) -> None:
self.mindelay = self._min_delay(spider)
self.maxdelay = self._max_delay(spider)
spider.download_delay = self._start_delay(spider) # type: ignore[attr-defined]
def _min_delay(self, spider: Spider) -> float:
s = self.crawler.settings
return getattr(spider, "download_delay", s.getfloat("DOWNLOAD_DELAY"))
if hasattr(spider, "download_delay"): # pragma: no cover
warn_on_deprecated_spider_attribute("download_delay", "DOWNLOAD_DELAY")
return spider.download_delay
return self.crawler.settings.getfloat("DOWNLOAD_DELAY")
def _max_delay(self, spider: Spider) -> float:
return self.crawler.settings.getfloat("AUTOTHROTTLE_MAX_DELAY")
def _start_delay(self, spider: Spider) -> float:
return max(
self.mindelay, self.crawler.settings.getfloat("AUTOTHROTTLE_START_DELAY")
self.mindelay,
self.crawler.settings.getfloat("AUTOTHROTTLE_START_DELAY"),
)
def _response_downloaded(

View File

@ -150,7 +150,7 @@ def test_startdelay_definition(min_spider, min_setting, start_setting, expected)
at = build_from_crawler(AutoThrottle, crawler)
spider = _TestSpider()
at._spider_opened(spider)
assert spider.download_delay == expected
assert at._start_delay(spider) == expected
@pytest.mark.parametrize(