Skip to content

Commit a733003

Browse files
committedFeb 14, 2025
Only register request and response loggers when needed
1 parent 5b9754b commit a733003

File tree

2 files changed

+55
-2
lines changed

2 files changed

+55
-2
lines changed
 

‎scrapy_playwright/handler.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,11 @@ async def _create_page(self, request: Request, spider: Spider) -> Page:
324324

325325
page.on("close", self._make_close_page_callback(context_name))
326326
page.on("crash", self._make_close_page_callback(context_name))
327-
page.on("request", _make_request_logger(context_name, spider))
328-
page.on("response", _make_response_logger(context_name, spider))
329327
page.on("request", self._increment_request_stats)
330328
page.on("response", self._increment_response_stats)
329+
if logger.getEffectiveLevel() <= logging.DEBUG:
330+
page.on("request", _make_request_logger(context_name, spider))
331+
page.on("response", _make_response_logger(context_name, spider))
331332

332333
return page
333334

‎tests/tests_asyncio/test_playwright_requests.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,58 @@ async def test_logging_record_spider(self):
388388

389389
assert any(getattr(rec, "spider", None) is spider for rec in self._caplog.records)
390390

391+
@allow_windows
392+
@patch("scrapy_playwright.handler._make_request_logger")
393+
async def test_request_logger_disabled(self, make_request_logger: MagicMock):
394+
self._caplog.set_level(logging.DEBUG + 1, "scrapy-playwright")
395+
async with make_handler({"PLAYWRIGHT_BROWSER_TYPE": self.browser_type}) as handler:
396+
with MockServer() as server:
397+
req = Request(url=server.urljoin("/index.html"), meta={"playwright": True})
398+
await handler._download_request(req, Spider("foo"))
399+
400+
debug_message = (
401+
f"[Context=default] Request: <{req.method} {req.url}> (resource type: document)"
402+
)
403+
assert not any(rec.message == debug_message for rec in self._caplog.records)
404+
make_request_logger.assert_not_called()
405+
406+
@allow_windows
407+
async def test_request_logger_enabled(self):
408+
self._caplog.set_level(logging.DEBUG, "scrapy-playwright")
409+
async with make_handler({"PLAYWRIGHT_BROWSER_TYPE": self.browser_type}) as handler:
410+
with MockServer() as server:
411+
req = Request(url=server.urljoin("/index.html"), meta={"playwright": True})
412+
await handler._download_request(req, Spider("foo"))
413+
414+
debug_message = (
415+
f"[Context=default] Request: <{req.method} {req.url}> (resource type: document)"
416+
)
417+
assert any(rec.message == debug_message for rec in self._caplog.records)
418+
419+
@allow_windows
420+
@patch("scrapy_playwright.handler._make_response_logger")
421+
async def test_response_logger_disabled(self, make_response_logger: MagicMock):
422+
self._caplog.set_level(logging.DEBUG + 1, "scrapy-playwright")
423+
async with make_handler({"PLAYWRIGHT_BROWSER_TYPE": self.browser_type}) as handler:
424+
with MockServer() as server:
425+
req = Request(url=server.urljoin("/index.html"), meta={"playwright": True})
426+
response = await handler._download_request(req, Spider("foo"))
427+
428+
debug_message = f"[Context=default] Response: <{response.status} {response.url}>"
429+
assert not any(rec.message == debug_message for rec in self._caplog.records)
430+
make_response_logger.assert_not_called()
431+
432+
@allow_windows
433+
async def test_response_logger_enabled(self):
434+
self._caplog.set_level(logging.DEBUG, "scrapy-playwright")
435+
async with make_handler({"PLAYWRIGHT_BROWSER_TYPE": self.browser_type}) as handler:
436+
with MockServer() as server:
437+
request = Request(url=server.urljoin("/index.html"), meta={"playwright": True})
438+
response = await handler._download_request(request, Spider("foo"))
439+
440+
debug_message = f"[Context=default] Response: <{response.status} {response.url}>"
441+
assert any(rec.message == debug_message for rec in self._caplog.records)
442+
391443
@allow_windows
392444
async def test_download_file_ok(self):
393445
settings_dict = {

0 commit comments

Comments
 (0)
Failed to load comments.