Add RequestFingerprinterProtocol.

This commit is contained in:
Andrey Rakhmatullin 2023-08-10 22:53:22 +04:00
parent b50268c100
commit 9df67a554e
2 changed files with 14 additions and 4 deletions

View File

@ -12,7 +12,11 @@ from scrapy.settings import BaseSettings
from scrapy.spiders import Spider
from scrapy.utils.deprecate import ScrapyDeprecationWarning
from scrapy.utils.job import job_dir
from scrapy.utils.request import RequestFingerprinter, referer_str
from scrapy.utils.request import (
RequestFingerprinter,
RequestFingerprinterProtocol,
referer_str,
)
if TYPE_CHECKING:
# typing.Self requires Python 3.11
@ -48,10 +52,10 @@ class RFPDupeFilter(BaseDupeFilter):
path: Optional[str] = None,
debug: bool = False,
*,
fingerprinter: Optional[RequestFingerprinter] = None,
fingerprinter: Optional[RequestFingerprinterProtocol] = None,
) -> None:
self.file = None
self.fingerprinter: RequestFingerprinter = (
self.fingerprinter: RequestFingerprinterProtocol = (
fingerprinter or RequestFingerprinter()
)
self.fingerprints: Set[str] = set()
@ -68,7 +72,7 @@ class RFPDupeFilter(BaseDupeFilter):
cls,
settings: BaseSettings,
*,
fingerprinter: Optional[RequestFingerprinter] = None,
fingerprinter: Optional[RequestFingerprinterProtocol] = None,
) -> Self:
debug = settings.getbool("DUPEFILTER_DEBUG")
try:

View File

@ -14,6 +14,7 @@ from typing import (
Iterable,
List,
Optional,
Protocol,
Tuple,
Type,
Union,
@ -230,6 +231,11 @@ def fingerprint(
return cache[cache_key]
class RequestFingerprinterProtocol(Protocol):
def fingerprint(self, request: Request) -> bytes:
...
class RequestFingerprinter:
"""Default fingerprinter.