@@ -32,32 +32,44 @@ class ScrapyZyteAPIRequestFingerprinter:
3232 def from_crawler (cls , crawler ):
3333 return cls (crawler )
3434
35- def __init__ ( self , crawler ):
36- settings = crawler . settings
35+ @ staticmethod
36+ def _poet_is_configured ( settings ):
3737 try :
38- from scrapy_poet import ScrapyPoetRequestFingerprinter
38+ from scrapy_poet import InjectionMiddleware
3939 except ImportError :
40- self ._has_poet = False
41- RequestFingerprinter = ScrapyRequestFingerprinter
40+ return False
41+ for k , v in settings .get ("DOWNLOADER_MIDDLEWARES" , {}).items ():
42+ if issubclass (load_object (k ), InjectionMiddleware ):
43+ return v is not None
44+ return False
45+
46+ def __init__ (self , crawler ):
47+ settings = crawler .settings
48+ self ._fallback_fingerprinter_is_poets = poet_is_configured = (
49+ self ._poet_is_configured (settings )
50+ )
51+ if poet_is_configured :
52+ from scrapy_poet import (
53+ ScrapyPoetRequestFingerprinter as DefaultFallbackRequestFingerprinter ,
54+ )
4255 else :
43- self ._has_poet = True
44- RequestFingerprinter = ScrapyPoetRequestFingerprinter
56+ DefaultFallbackRequestFingerprinter = ScrapyRequestFingerprinter
4557 self ._fallback_request_fingerprinter = _build_from_crawler (
4658 load_object (
4759 settings .get (
4860 "ZYTE_API_FALLBACK_REQUEST_FINGERPRINTER_CLASS" ,
49- RequestFingerprinter ,
61+ DefaultFallbackRequestFingerprinter ,
5062 )
5163 ),
5264 crawler ,
5365 )
54- if self ._has_poet and not isinstance (
55- self ._fallback_request_fingerprinter , cast (type , RequestFingerprinter )
66+ if poet_is_configured and not isinstance (
67+ self ._fallback_request_fingerprinter ,
68+ cast (type , DefaultFallbackRequestFingerprinter ),
5669 ):
5770 logger .warning (
58- f"You have scrapy-poet installed, but your custom value "
59- f"for the ZYTE_API_FALLBACK_REQUEST_FINGERPRINTER_CLASS "
60- f"setting "
71+ f"scrapy-poet is enabled, but your custom value for the "
72+ f"ZYTE_API_FALLBACK_REQUEST_FINGERPRINTER_CLASS setting "
6173 f"({ settings ['ZYTE_API_FALLBACK_REQUEST_FINGERPRINTER_CLASS' ]!r} )"
6274 f" does not point to a subclass of "
6375 f"scrapy_poet.ScrapyPoetRequestFingerprinter. For request "
@@ -69,7 +81,7 @@ def __init__(self, crawler):
6981 f"to the SCRAPY_POET_REQUEST_FINGERPRINTER_BASE_CLASS "
7082 f"setting instead."
7183 )
72- self ._has_poet = False
84+ self ._fallback_fingerprinter_is_poets = False
7385 self ._cache : "WeakKeyDictionary[Request, bytes]" = WeakKeyDictionary ()
7486 self ._param_parser = _ParamParser (crawler , cookies_enabled = False )
7587 self ._crawler = crawler
@@ -124,7 +136,7 @@ def fingerprint(self, request):
124136 api_params .setdefault ("sessionContext" , session_pool )
125137 self ._normalize_params (api_params )
126138 fingerprint = json .dumps (api_params , sort_keys = True ).encode ()
127- if self ._has_poet :
139+ if self ._fallback_fingerprinter_is_poets :
128140 deps_key = self ._fallback_request_fingerprinter .get_deps_key (
129141 request
130142 )
0 commit comments