Skip to content

Commit e25c21a

Browse files
committed
Async syntax for download_request and close
1 parent 410fd98 commit e25c21a

File tree

1 file changed

+44
-16
lines changed

1 file changed

+44
-16
lines changed

scrapy_playwright/handler.py

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from scrapy.http.headers import Headers
3232
from scrapy.responsetypes import responsetypes
3333
from 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
3535
from scrapy.utils.misc import load_object
3636
from scrapy.utils.reactor import verify_installed_reactor
3737
from 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

Comments
 (0)