From b3a9a6de869737836b34c8b33f95e4819d21f0d5 Mon Sep 17 00:00:00 2001 From: Diogo Castro Date: Fri, 19 Jun 2026 00:32:29 -0300 Subject: [PATCH] Fix codecov: remove dead code, add test for engine close branch --- scrapy/downloadermiddlewares/offsite.py | 8 ++------ tests/test_downloadermiddleware_offsite.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/scrapy/downloadermiddlewares/offsite.py b/scrapy/downloadermiddlewares/offsite.py index dca92631f..ea2c2f030 100644 --- a/scrapy/downloadermiddlewares/offsite.py +++ b/scrapy/downloadermiddlewares/offsite.py @@ -131,9 +131,7 @@ class OffsiteMiddleware: return re.compile("") # allow all by default domains = self._process_domains(allowed_domains, "allowed_domains") - if domains: - return re.compile(rf"^(.*\.)?({'|'.join(domains)})$") - return re.compile("") # allow all if no valid domains remain + return re.compile(rf"^(.*\.)?({'|'.join(domains)})$") def _get_disallowed_host_regex(self, spider: Spider) -> re.Pattern[str] | None: """Build a regex that positively matches disallowed hosts. @@ -146,6 +144,4 @@ class OffsiteMiddleware: return None domains = self._process_domains(disallowed_domains, "disallowed_domains") - if domains: - return re.compile(rf"^(.*\.)?({'|'.join(domains)})$") - return None + return re.compile(rf"^(.*\.)?({'|'.join(domains)})$") diff --git a/tests/test_downloadermiddleware_offsite.py b/tests/test_downloadermiddleware_offsite.py index cfa8f146a..1d459c8cb 100644 --- a/tests/test_downloadermiddleware_offsite.py +++ b/tests/test_downloadermiddleware_offsite.py @@ -1,4 +1,5 @@ import logging +from unittest.mock import AsyncMock, patch import pytest @@ -125,6 +126,25 @@ def test_process_request_invalid_domains(caplog): assert "Invalid domain configuration" in caplog.text +def test_invalid_domains_closes_spider(caplog): + crawler = get_crawler(Spider) + crawler.spider = crawler._create_spider( + name="a", allowed_domains=["a.example", None] + ) + mw = OffsiteMiddleware.from_crawler(crawler) + mock_engine = AsyncMock() + crawler.engine = mock_engine + with ( + patch( + "scrapy.downloadermiddlewares.offsite._schedule_coro" + ) as mock_schedule, + caplog.at_level(logging.ERROR), + ): + mw.spider_opened(crawler.spider) + assert "Invalid domain configuration" in caplog.text + mock_schedule.assert_called_once() + + @pytest.mark.parametrize( ("allowed_domain", "url", "allowed"), [