diff --git a/pyproject.toml b/pyproject.toml index e2484b02a..22e3f7b22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -147,8 +147,8 @@ source = [ [tool.coverage.report] exclude_also = [ - "if TYPE_CHECKING:", "@(abc\\.)?abstractmethod", + '\A(?s:.*# pragma: no file cover.*)\Z', ] [tool.pylint.MASTER] diff --git a/scrapy/core/downloader/handlers/http.py b/scrapy/core/downloader/handlers/http.py index bc343e37f..a7b592d00 100644 --- a/scrapy/core/downloader/handlers/http.py +++ b/scrapy/core/downloader/handlers/http.py @@ -1,3 +1,4 @@ +# pragma: no file cover import warnings from scrapy.core.downloader.handlers.http10 import HTTP10DownloadHandler diff --git a/scrapy/core/engine.py b/scrapy/core/engine.py index b29c5e80e..93fc64cdc 100644 --- a/scrapy/core/engine.py +++ b/scrapy/core/engine.py @@ -159,7 +159,9 @@ class ExecutionEngine: ) return scheduler_cls - def start(self, _start_request_processing=True) -> Deferred[None]: + def start( + self, _start_request_processing=True + ) -> Deferred[None]: # pragma: no cover warnings.warn( "ExecutionEngine.start() is deprecated, use start_async() instead", ScrapyDeprecationWarning, @@ -197,7 +199,7 @@ class ExecutionEngine: self._start_request_processing_awaitable = Deferred.fromCoroutine(coro) await maybe_deferred_to_future(self._closewait) - def stop(self) -> Deferred[None]: + def stop(self) -> Deferred[None]: # pragma: no cover warnings.warn( "ExecutionEngine.stop() is deprecated, use stop_async() instead", ScrapyDeprecationWarning, @@ -233,7 +235,7 @@ class ExecutionEngine: if self._closewait: self._closewait.callback(None) - def close(self) -> Deferred[None]: + def close(self) -> Deferred[None]: # pragma: no cover warnings.warn( "ExecutionEngine.close() is deprecated, use close_async() instead", ScrapyDeprecationWarning, @@ -510,7 +512,9 @@ class ExecutionEngine: finally: self._slot.nextcall.schedule() - def open_spider(self, spider: Spider, close_if_idle: bool = True) -> Deferred[None]: + def open_spider( + self, spider: Spider, close_if_idle: bool = True + ) -> Deferred[None]: # pragma: no cover warnings.warn( "ExecutionEngine.open_spider() is deprecated, use open_spider_async() instead", ScrapyDeprecationWarning, @@ -573,7 +577,9 @@ class ExecutionEngine: assert isinstance(ex, CloseSpider) # typing _schedule_coro(self.close_spider_async(reason=ex.reason)) - def close_spider(self, spider: Spider, reason: str = "cancelled") -> Deferred[None]: + def close_spider( + self, spider: Spider, reason: str = "cancelled" + ) -> Deferred[None]: # pragma: no cover warnings.warn( "ExecutionEngine.close_spider() is deprecated, use close_spider_async() instead", ScrapyDeprecationWarning, diff --git a/scrapy/core/scheduler.py b/scrapy/core/scheduler.py index bfca9cad4..491e7a8a6 100644 --- a/scrapy/core/scheduler.py +++ b/scrapy/core/scheduler.py @@ -426,7 +426,7 @@ class Scheduler(BaseScheduler): key="", start_queue_cls=self._smqclass, ) - except TypeError: + except TypeError: # pragma: no cover warn( f"The __init__ method of {global_object_name(self.pqclass)} " f"does not support a `start_queue_cls` keyword-only " @@ -455,7 +455,7 @@ class Scheduler(BaseScheduler): startprios=state, start_queue_cls=self._sdqclass, ) - except TypeError: + except TypeError: # pragma: no cover warn( f"The __init__ method of {global_object_name(self.pqclass)} " f"does not support a `start_queue_cls` keyword-only " diff --git a/scrapy/core/scraper.py b/scrapy/core/scraper.py index df6aee715..695f6ef3e 100644 --- a/scrapy/core/scraper.py +++ b/scrapy/core/scraper.py @@ -151,7 +151,9 @@ class Scraper: else: self._itemproc_has_async[method] = True - def open_spider(self, spider: Spider | None = None) -> Deferred[None]: + def open_spider( + self, spider: Spider | None = None + ) -> Deferred[None]: # pragma: no cover warnings.warn( "Scraper.open_spider() is deprecated, use open_spider_async() instead", ScrapyDeprecationWarning, @@ -176,7 +178,9 @@ class Scraper: self.itemproc.open_spider(self.crawler.spider) ) - def close_spider(self, spider: Spider | None = None) -> Deferred[None]: + def close_spider( + self, spider: Spider | None = None + ) -> Deferred[None]: # pragma: no cover warnings.warn( "Scraper.close_spider() is deprecated, use close_spider_async() instead", ScrapyDeprecationWarning, @@ -294,7 +298,7 @@ class Scraper: def call_spider( self, result: Response | Failure, request: Request, spider: Spider | None = None - ) -> Deferred[Iterable[Any] | AsyncIterator[Any]]: + ) -> Deferred[Iterable[Any] | AsyncIterator[Any]]: # pragma: no cover warnings.warn( "Scraper.call_spider() is deprecated, use call_spider_async() instead", ScrapyDeprecationWarning, @@ -388,7 +392,7 @@ class Scraper: request: Request, response: Response | Failure, spider: Spider | None = None, - ) -> Deferred[None]: + ) -> Deferred[None]: # pragma: no cover """Pass items/requests produced by a callback to ``_process_spidermw_output()`` in parallel.""" warnings.warn( "Scraper.handle_spider_output() is deprecated, use handle_spider_output_async() instead", @@ -467,7 +471,7 @@ class Scraper: def start_itemproc( self, item: Any, *, response: Response | Failure | None - ) -> Deferred[None]: + ) -> Deferred[None]: # pragma: no cover """Send *item* to the item pipelines for processing. *response* is the source of the item data. If the item does not come diff --git a/scrapy/core/spidermw.py b/scrapy/core/spidermw.py index 61fecfc60..6eaf84642 100644 --- a/scrapy/core/spidermw.py +++ b/scrapy/core/spidermw.py @@ -383,7 +383,7 @@ class SpiderMiddlewareManager(MiddlewareManager): response: Response, request: Request, spider: Spider, - ) -> Deferred[MutableChain[_T] | MutableAsyncChain[_T]]: + ) -> Deferred[MutableChain[_T] | MutableAsyncChain[_T]]: # pragma: no cover warn( "SpiderMiddlewareManager.scrape_response() is deprecated, use scrape_response_async() instead", ScrapyDeprecationWarning, diff --git a/scrapy/utils/defer.py b/scrapy/utils/defer.py index 218dc8d7a..5bd4506d6 100644 --- a/scrapy/utils/defer.py +++ b/scrapy/utils/defer.py @@ -43,7 +43,7 @@ _P = ParamSpec("_P") _DEFER_DELAY = 0.1 -def defer_fail(_failure: Failure) -> Deferred[Any]: +def defer_fail(_failure: Failure) -> Deferred[Any]: # pragma: no cover """Same as twisted.internet.defer.fail but delay calling errback until next reactor loop @@ -64,7 +64,7 @@ def defer_fail(_failure: Failure) -> Deferred[Any]: return d -def defer_succeed(result: _T) -> Deferred[_T]: +def defer_succeed(result: _T) -> Deferred[_T]: # pragma: no cover """Same as twisted.internet.defer.succeed but delay calling callback until next reactor loop @@ -99,7 +99,7 @@ async def _defer_sleep_async() -> None: await d -def defer_result(result: Any) -> Deferred[Any]: +def defer_result(result: Any) -> Deferred[Any]: # pragma: no cover warnings.warn( "scrapy.utils.defer.defer_result() is deprecated, use" " twisted.internet.defer.success() and twisted.internet.defer.fail()," @@ -137,7 +137,7 @@ def mustbe_deferred( f: Callable[_P, Deferred[_T] | _T], *args: _P.args, **kw: _P.kwargs, -) -> Deferred[_T]: +) -> Deferred[_T]: # pragma: no cover """Same as twisted.internet.defer.maybeDeferred, but delay calling callback/errback to next reactor loop """ @@ -299,7 +299,7 @@ def process_chain( input: _T, # noqa: A002 *a: _P.args, **kw: _P.kwargs, -) -> Deferred[_T]: +) -> Deferred[_T]: # pragma: no cover """Return a Deferred built by chaining the given callbacks""" warnings.warn( "process_chain() is deprecated.", @@ -452,7 +452,7 @@ def _maybeDeferred_coro( return result if asyncio.isfuture(result) or inspect.isawaitable(result): return deferred_from_coro(result) - if isinstance(result, failure.Failure): + if isinstance(result, failure.Failure): # pragma: no cover if warn: warnings.warn( f"{global_object_name(f)} returned a Failure, this is deprecated." diff --git a/scrapy/utils/iterators.py b/scrapy/utils/iterators.py index ad9640e47..9bb64c021 100644 --- a/scrapy/utils/iterators.py +++ b/scrapy/utils/iterators.py @@ -177,7 +177,7 @@ def csviter( quotechar is the character used to enclosure fields on the given obj. """ - if encoding is not None: + if encoding is not None: # pragma: no cover warn( "The encoding argument of csviter() is ignored and will be removed" " in a future Scrapy version.", diff --git a/scrapy/utils/test.py b/scrapy/utils/test.py index 7d81868a9..e60ae18db 100644 --- a/scrapy/utils/test.py +++ b/scrapy/utils/test.py @@ -37,7 +37,7 @@ if TYPE_CHECKING: _T = TypeVar("_T") -def assert_gcs_environ() -> None: +def assert_gcs_environ() -> None: # pragma: no cover warnings.warn( "The assert_gcs_environ() function is deprecated and will be removed in a future version of Scrapy." " Check GCS_PROJECT_ID directly.", @@ -48,7 +48,7 @@ def assert_gcs_environ() -> None: raise SkipTest("GCS_PROJECT_ID not found") -def skip_if_no_boto() -> None: +def skip_if_no_boto() -> None: # pragma: no cover warnings.warn( "The skip_if_no_boto() function is deprecated and will be removed in a future version of Scrapy." " Check scrapy.utils.boto.is_botocore_available() directly.", @@ -61,7 +61,7 @@ def skip_if_no_boto() -> None: def get_gcs_content_and_delete( bucket: Any, path: str -) -> tuple[bytes, list[dict[str, str]], Any]: +) -> tuple[bytes, list[dict[str, str]], Any]: # pragma: no cover from google.cloud import storage # noqa: PLC0415 warnings.warn( @@ -85,7 +85,7 @@ def get_ftp_content_and_delete( username: str, password: str, use_active_mode: bool = False, -) -> bytes: +) -> bytes: # pragma: no cover warnings.warn( "The get_ftp_content_and_delete() function is deprecated and will be removed in a future version of Scrapy.", category=ScrapyDeprecationWarning, @@ -185,7 +185,7 @@ def get_from_asyncio_queue(value: _T) -> Awaitable[_T]: return getter -def mock_google_cloud_storage() -> tuple[Any, Any, Any]: +def mock_google_cloud_storage() -> tuple[Any, Any, Any]: # pragma: no cover """Creates autospec mocks for google-cloud-storage Client, Bucket and Blob classes and set their proper return values. """ diff --git a/scrapy/utils/testproc.py b/scrapy/utils/testproc.py index ce26b7f92..2f1acffd7 100644 --- a/scrapy/utils/testproc.py +++ b/scrapy/utils/testproc.py @@ -1,3 +1,4 @@ +# pragma: no file cover from __future__ import annotations import os diff --git a/scrapy/utils/testsite.py b/scrapy/utils/testsite.py index f12b301fd..e57eb802b 100644 --- a/scrapy/utils/testsite.py +++ b/scrapy/utils/testsite.py @@ -1,3 +1,4 @@ +# pragma: no file cover import warnings from urllib.parse import urljoin diff --git a/scrapy/utils/versions.py b/scrapy/utils/versions.py index 052321ae3..b15063900 100644 --- a/scrapy/utils/versions.py +++ b/scrapy/utils/versions.py @@ -34,7 +34,7 @@ def get_versions( return [(item, _version(item)) for item in software] -def scrapy_components_versions() -> list[tuple[str, str]]: +def scrapy_components_versions() -> list[tuple[str, str]]: # pragma: no cover warn( ( "scrapy.utils.versions.scrapy_components_versions() is deprecated, "