@@ -39,16 +39,26 @@ def spider_output_processor(middleware, request, spider):
3939
4040
4141@pytest .mark .parametrize (
42- "mw_cls, processor" ,
42+ [ "mw_cls" , " processor"] ,
4343 [
4444 (ScrapyZyteAPIDownloaderMiddleware , request_processor ),
4545 (ScrapyZyteAPISpiderMiddleware , start_request_processor ),
4646 (ScrapyZyteAPISpiderMiddleware , spider_output_processor ),
4747 ],
4848)
49+ @pytest .mark .parametrize (
50+ ["settings" , "preserve" ],
51+ [
52+ ({}, True ),
53+ ({"ZYTE_API_PRESERVE_DELAY" : False }, False ),
54+ ({"ZYTE_API_PRESERVE_DELAY" : True }, True ),
55+ ({"AUTOTHROTTLE_ENABLED" : True }, False ),
56+ ({"AUTOTHROTTLE_ENABLED" : True , "ZYTE_API_PRESERVE_DELAY" : True }, True ),
57+ ],
58+ )
4959@ensureDeferred
50- async def test_autothrottle_handling (mw_cls , processor ):
51- crawler = get_crawler ()
60+ async def test_preserve_delay (mw_cls , processor , settings , preserve ):
61+ crawler = get_crawler (settings_dict = settings )
5262 await crawler .crawl ("a" )
5363 spider = crawler .spider
5464
@@ -64,13 +74,13 @@ async def test_autothrottle_handling(mw_cls, processor):
6474 _ , slot = crawler .engine .downloader ._get_slot (request , spider )
6575 assert slot .delay == spider .download_delay
6676
67- # On Zyte API requests, the download slot is changed, and its delay is set
68- # to 0.
77+ # On Zyte API requests, the download slot is changed, and its delay may be
78+ # set to 0 depending on settings .
6979 request = Request ("https://example.com" , meta = {"zyte_api" : {}})
7080 processor (middleware , request , spider )
7181 assert request .
meta [
"download_slot" ]
== "[email protected] " 7282 _ , slot = crawler .engine .downloader ._get_slot (request , spider )
73- assert slot .delay == 0
83+ assert slot .delay == ( 5 if preserve else 0 )
7484
7585 # Requests that happen to already have the right download slot assigned
7686 # work the same.
@@ -79,17 +89,18 @@ async def test_autothrottle_handling(mw_cls, processor):
7989 processor (middleware , request , spider )
8090 assert request .
meta [
"download_slot" ]
== "[email protected] " 8191 _ , slot = crawler .engine .downloader ._get_slot (request , spider )
82- assert slot .delay == 0
92+ assert slot .delay == ( 5 if preserve else 0 )
8393
84- # The slot delay is set to 0 every time a request for the slot is
94+ # The slot delay is taken into account every time a request for the slot is
8595 # processed, so even if it gets changed later on somehow, the downloader
86- # middleware will reset it to 0 again the next time it processes a request.
96+ # middleware may reset it to 0 again the next time it processes a request
97+ # depending on settings.
8798 slot .delay = 10
8899 request = Request ("https://example.com" , meta = {"zyte_api" : {}})
89100 processor (middleware , request , spider )
90101 assert request .
meta [
"download_slot" ]
== "[email protected] " 91102 _ , slot = crawler .engine .downloader ._get_slot (request , spider )
92- assert slot .delay == 0
103+ assert slot .delay == ( 10 if preserve else 0 )
93104
94105 await crawler .stop ()
95106
0 commit comments