From c7d486b91cfffe500cca098f4fff1f9f3491643b Mon Sep 17 00:00:00 2001 From: Andrey Rakhmatullin Date: Sat, 11 Jul 2026 23:10:42 +0500 Subject: [PATCH] Stop using IFeedStorage. --- docs/news.rst | 5 +++++ scrapy/extensions/feedexport.py | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/news.rst b/docs/news.rst index e637bfe81..3964722c7 100644 --- a/docs/news.rst +++ b/docs/news.rst @@ -18,6 +18,11 @@ Backward-incompatible changes - :func:`~scrapy.spiderloader.get_spider_loader` no longer checks that the configured spider loader implements the ``ISpiderLoader`` interface. + - :class:`~scrapy.extensions.feedexport.BlockingFeedStorage`, + - :class:`~scrapy.extensions.feedexport.FileFeedStorage` and + - :class:`~scrapy.extensions.feedexport.StdoutFeedStorage` are no longer + marked as implementing the ``IFeedStorage`` interface. + (:issue:`6585`, :issue:`TBD`) .. _release-2.17.0: diff --git a/scrapy/extensions/feedexport.py b/scrapy/extensions/feedexport.py index fa708a2e1..1a93c7b4a 100644 --- a/scrapy/extensions/feedexport.py +++ b/scrapy/extensions/feedexport.py @@ -22,7 +22,7 @@ from urllib.parse import unquote, urlparse from twisted.internet.defer import Deferred, DeferredList from w3lib.url import file_uri_to_path -from zope.interface import Interface, implementer +from zope.interface import Interface from scrapy import Spider, signals from scrapy.exceptions import NotConfigured, ScrapyDeprecationWarning @@ -120,7 +120,6 @@ class FeedStorageProtocol(Protocol): """Store the given file stream""" -@implementer(IFeedStorage) class BlockingFeedStorage(ABC): def open(self, spider: Spider) -> IO[bytes]: path = spider.crawler.settings["FEED_TEMPDIR"] @@ -137,7 +136,6 @@ class BlockingFeedStorage(ABC): raise NotImplementedError -@implementer(IFeedStorage) class StdoutFeedStorage: def __init__( self, @@ -164,7 +162,6 @@ class StdoutFeedStorage: pass -@implementer(IFeedStorage) class FileFeedStorage: def __init__(self, uri: str, *, feed_options: dict[str, Any] | None = None): self.path: str = file_uri_to_path(uri) if uri.startswith("file:") else uri