get_media_requests: support and encourage callback=NO_CALLBACK

This commit is contained in:
Adrián Chaves 2023-01-30 12:37:34 +01:00
parent f03b47db05
commit 389fd99e79
3 changed files with 12 additions and 3 deletions

View File

@ -22,6 +22,7 @@ from twisted.internet import defer, threads
from scrapy.exceptions import IgnoreRequest, NotConfigured
from scrapy.http import Request
from scrapy.http.request import NO_CALLBACK
from scrapy.pipelines.media import MediaPipeline
from scrapy.settings import Settings
from scrapy.utils.boto import is_botocore_available
@ -517,7 +518,7 @@ class FilesPipeline(MediaPipeline):
# Overridable Interface
def get_media_requests(self, item, info):
urls = ItemAdapter(item).get(self.files_urls_field, [])
return [Request(u) for u in urls]
return [Request(u, callback=NO_CALLBACK) for u in urls]
def file_downloaded(self, response, request, info, *, item=None):
path = self.file_path(request, response=response, info=info, item=item)

View File

@ -13,6 +13,7 @@ from itemadapter import ItemAdapter
from scrapy.exceptions import DropItem, NotConfigured, ScrapyDeprecationWarning
from scrapy.http import Request
from scrapy.http.request import NO_CALLBACK
from scrapy.pipelines.files import FileException, FilesPipeline
# TODO: from scrapy.pipelines.media import MediaPipeline
@ -214,7 +215,7 @@ class ImagesPipeline(FilesPipeline):
def get_media_requests(self, item, info):
urls = ItemAdapter(item).get(self.images_urls_field, [])
return [Request(u) for u in urls]
return [Request(u, callback=NO_CALLBACK) for u in urls]
def item_completed(self, results, item, info):
with suppress(KeyError):

View File

@ -18,6 +18,10 @@ from scrapy.utils.log import failure_to_exc_info
logger = logging.getLogger(__name__)
def _DUMMY_CALLBACK(response):
return response
class MediaPipeline:
LOG_FAILED_RESULTS = True
@ -91,7 +95,10 @@ class MediaPipeline:
def _process_request(self, request, info, item):
fp = self._fingerprinter.fingerprint(request)
cb = request.callback or (lambda _: _)
if not request.callback or request.callback is NO_CALLBACK:
cb = _DUMMY_CALLBACK
else:
cb = request.callback
eb = request.errback
request.callback = NO_CALLBACK
request.errback = None