3131from scrapy .http .headers import Headers
3232from scrapy .responsetypes import responsetypes
3333from scrapy .settings import Settings
34- from scrapy .utils .defer import deferred_from_coro
34+ from scrapy .utils .defer import deferred_from_coro , maybe_deferred_to_future
3535from scrapy .utils .misc import load_object
3636from scrapy .utils .reactor import verify_installed_reactor
3737from twisted .internet .defer import Deferred , inlineCallbacks
@@ -142,9 +142,11 @@ class ScrapyPlaywrightDownloadHandler(HTTP11DownloadHandler):
142142
143143 def __init__ (self , crawler : Crawler ) -> None :
144144 if _SCRAPY_ASYNC_API :
145- super ().__init__ (crawler = crawler ) # pylint: disable=no-value-for-parameter
145+ super ().__init__ (crawler = crawler )
146146 else :
147- super ().__init__ (settings = crawler .settings , crawler = crawler )
147+ super ().__init__ ( # pylint: disable=unexpected-keyword-arg
148+ settings = crawler .settings , crawler = crawler
149+ )
148150 verify_installed_reactor ("twisted.internet.asyncioreactor.AsyncioSelectorReactor" )
149151 crawler .signals .connect (self ._engine_started , signals .engine_started )
150152 self .stats = crawler .stats
@@ -354,13 +356,24 @@ def _set_max_concurrent_context_count(self):
354356 "playwright/context_count/max_concurrent" , len (self .context_wrappers )
355357 )
356358
357- @inlineCallbacks
358- def close (self ) -> Deferred :
359- logger .info ("Closing download handler" )
360- yield super ().close ()
361- yield self ._deferred_from_coro (self ._close ())
362- if self .config .use_threaded_loop :
363- _ThreadedLoopAdapter .stop (id (self ))
359+ if _SCRAPY_ASYNC_API :
360+
361+ async def close (self ) -> None :
362+ logger .info ("Closing download handler" )
363+ await super ().close ()
364+ await self ._close ()
365+ if self .config .use_threaded_loop :
366+ _ThreadedLoopAdapter .stop (id (self ))
367+
368+ else :
369+
370+ @inlineCallbacks
371+ def close (self ) -> Deferred : # pylint: disable=invalid-overridden-method
372+ logger .info ("Closing download handler" )
373+ yield super ().close ()
374+ yield self ._deferred_from_coro (self ._close ())
375+ if self .config .use_threaded_loop :
376+ _ThreadedLoopAdapter .stop (id (self ))
364377
365378 async def _close (self ) -> None :
366379 with suppress (TargetClosedError ):
@@ -374,12 +387,27 @@ async def _close(self) -> None:
374387 if self .playwright :
375388 await self .playwright .stop ()
376389
377- def download_request (self , request : Request , spider : Spider ) -> Deferred :
378- if request .meta .get ("playwright" ):
379- return self ._deferred_from_coro (self ._download_request (request , spider ))
380- if _SCRAPY_ASYNC_API :
381- return super ().download_request (request )
382- return super ().download_request (request , spider )
390+ if _SCRAPY_ASYNC_API :
391+
392+ async def download_request (self , request : Request ) -> Response :
393+ if request .meta .get ("playwright" ):
394+ return await maybe_deferred_to_future (
395+ self ._deferred_from_coro (self ._download_request (request , self ._crawler .spider ))
396+ )
397+ return await super ().download_request ( # pylint: disable=no-value-for-parameter
398+ request
399+ )
400+
401+ else :
402+
403+ def download_request ( # type: ignore[misc] # pylint: disable=invalid-overridden-method,arguments-differ
404+ self , request : Request , spider : Spider
405+ ) -> Deferred :
406+ if request .meta .get ("playwright" ):
407+ return self ._deferred_from_coro (self ._download_request (request , spider ))
408+ return super ().download_request ( # pylint: disable=unexpected-keyword-arg
409+ request = request , spider = spider
410+ )
383411
384412 async def _download_request (self , request : Request , spider : Spider ) -> Response :
385413 counter = 0
0 commit comments