Add Downloader.get_slot_key() without a spider parameter (#6352)

This commit is contained in:
Sanchay Kumar 2024-05-10 17:56:45 +05:30 committed by GitHub
parent ae7bb849f5
commit c9ef520936
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 30 additions and 6 deletions

View File

@ -3,6 +3,20 @@
Release notes
=============
.. _release-VERSION:
Scrapy VERSION (YYYY-MM-DD)
---------------------------
Deprecations
~~~~~~~~~~~~
- :func:`scrapy.core.downloader.Downloader._get_slot_key` is now deprecated.
Consider using its corresponding public method get_slot_key() instead.
(:issue:`6340`)
.. _release-2.11.1:
Scrapy 2.11.1 (2024-02-14)

View File

@ -1,4 +1,5 @@
import random
import warnings
from collections import deque
from datetime import datetime
from time import time
@ -10,6 +11,7 @@ from twisted.internet.defer import Deferred
from scrapy import Request, Spider, signals
from scrapy.core.downloader.handlers import DownloadHandlers
from scrapy.core.downloader.middleware import DownloaderMiddlewareManager
from scrapy.exceptions import ScrapyDeprecationWarning
from scrapy.http import Response
from scrapy.resolver import dnscache
from scrapy.settings import BaseSettings
@ -125,7 +127,7 @@ class Downloader:
return len(self.active) >= self.total_concurrency
def _get_slot(self, request: Request, spider: Spider) -> Tuple[str, Slot]:
key = self._get_slot_key(request, spider)
key = self.get_slot_key(request)
if key not in self.slots:
slot_settings = self.per_slot_settings.get(key, {})
conc = (
@ -143,7 +145,7 @@ class Downloader:
return key, self.slots[key]
def _get_slot_key(self, request: Request, spider: Optional[Spider]) -> str:
def get_slot_key(self, request: Request) -> str:
if self.DOWNLOAD_SLOT in request.meta:
return cast(str, request.meta[self.DOWNLOAD_SLOT])
@ -153,6 +155,14 @@ class Downloader:
return key
def _get_slot_key(self, request: Request, spider: Optional[Spider]) -> str:
warnings.warn(
"Use of this protected method is deprecated. Consider using its corresponding public method get_slot_key() instead.",
ScrapyDeprecationWarning,
stacklevel=2,
)
return self.get_slot_key(request)
def _enqueue_request(self, request: Request, spider: Spider) -> Deferred:
key, slot = self._get_slot(request, spider)
request.meta[self.DOWNLOAD_SLOT] = key

View File

@ -180,7 +180,7 @@ class DownloaderInterface:
return [(self._active_downloads(slot), slot) for slot in possible_slots]
def get_slot_key(self, request: Request) -> str:
return self.downloader._get_slot_key(request, None)
return self.downloader.get_slot_key(request)
def _active_downloads(self, slot: str) -> int:
"""Return a number of requests in a Downloader for a given slot"""

View File

@ -25,7 +25,7 @@ class MockDownloader:
def __init__(self):
self.slots = {}
def _get_slot_key(self, request, spider):
def get_slot_key(self, request):
if Downloader.DOWNLOAD_SLOT in request.meta:
return request.meta[Downloader.DOWNLOAD_SLOT]
@ -273,14 +273,14 @@ class DownloaderAwareSchedulerTestMixin:
while self.scheduler.has_pending_requests():
request = self.scheduler.next_request()
# pylint: disable=protected-access
slot = downloader._get_slot_key(request, None)
slot = downloader.get_slot_key(request)
dequeued_slots.append(slot)
downloader.increment(slot)
requests.append(request)
for request in requests:
# pylint: disable=protected-access
slot = downloader._get_slot_key(request, None)
slot = downloader.get_slot_key(request)
downloader.decrement(slot)
self.assertTrue(