diff --git a/scrapy/contrib/pipeline/images.py b/scrapy/contrib/pipeline/images.py index 238961ad8..a103d5bd9 100644 --- a/scrapy/contrib/pipeline/images.py +++ b/scrapy/contrib/pipeline/images.py @@ -148,9 +148,9 @@ class ImagesPipeline(MediaPipeline): 's3': S3ImagesStore, } - def __init__(self, store_uri): + def __init__(self, store_uri, download_func=None): self.store = self._get_store(store_uri) - super(ImagesPipeline, self).__init__() + super(ImagesPipeline, self).__init__(download_func=download_func) @classmethod def from_settings(cls, settings): diff --git a/scrapy/tests/test_pipeline_images.py b/scrapy/tests/test_pipeline_images.py index 95dfa1a0c..41e9be71f 100644 --- a/scrapy/tests/test_pipeline_images.py +++ b/scrapy/tests/test_pipeline_images.py @@ -5,8 +5,6 @@ from shutil import rmtree from twisted.trial import unittest -from scrapy.crawler import Crawler -from scrapy.conf import settings try: import Image @@ -14,6 +12,10 @@ try: except ImportError, e: skip = True +def _mocked_download_func(request, info): + response = request.meta.get('response') + return response() if callable(response) else response + class ImagesPipelineTestCase(unittest.TestCase): @@ -21,14 +23,10 @@ class ImagesPipelineTestCase(unittest.TestCase): def setUp(self): from scrapy.contrib.pipeline.images import ImagesPipeline - - self.crawler = Crawler(settings) - self.crawler.install() self.tempdir = mkdtemp() - self.pipeline = ImagesPipeline(self.tempdir) + self.pipeline = ImagesPipeline(self.tempdir, download_func=_mocked_download_func) def tearDown(self): - self.crawler.uninstall() rmtree(self.tempdir) def test_image_path(self): diff --git a/scrapy/tests/test_pipeline_media.py b/scrapy/tests/test_pipeline_media.py index 64b506820..569dc2d5b 100644 --- a/scrapy/tests/test_pipeline_media.py +++ b/scrapy/tests/test_pipeline_media.py @@ -9,6 +9,8 @@ from scrapy.spider import BaseSpider from scrapy.utils.request import request_fingerprint from scrapy.contrib.pipeline.media import MediaPipeline from scrapy.utils.test import get_crawler +from scrapy.utils.signal import disconnect_all +from scrapy import signals from scrapy import log @@ -28,6 +30,9 @@ class BaseMediaPipelineTestCase(unittest.TestCase): self.info = self.pipe.spiderinfo[self.spider] def tearDown(self): + for name, signal in vars(signals).items(): + if not name.startswith('_'): + disconnect_all(signal) self.pipe.close_spider(self.spider) def test_default_media_to_download(self):