diff --git a/scrapy/extensions/spiderstate.py b/scrapy/extensions/spiderstate.py index 3799c7c66..2220cbd8f 100644 --- a/scrapy/extensions/spiderstate.py +++ b/scrapy/extensions/spiderstate.py @@ -2,6 +2,7 @@ import os from six.moves import cPickle as pickle from scrapy import signals +from scrapy.exceptions import NotConfigured from scrapy.utils.job import job_dir class SpiderState(object): @@ -12,7 +13,11 @@ class SpiderState(object): @classmethod def from_crawler(cls, crawler): - obj = cls(job_dir(crawler.settings)) + jobdir = job_dir(crawler.settings) + if not jobdir: + raise NotConfigured + + obj = cls(jobdir) crawler.signals.connect(obj.spider_closed, signal=signals.spider_closed) crawler.signals.connect(obj.spider_opened, signal=signals.spider_opened) return obj diff --git a/tests/test_spiderstate.py b/tests/test_spiderstate.py index d83015bd9..d1d6debec 100644 --- a/tests/test_spiderstate.py +++ b/tests/test_spiderstate.py @@ -4,6 +4,8 @@ from twisted.trial import unittest from scrapy.extensions.spiderstate import SpiderState from scrapy.spiders import Spider +from scrapy.exceptions import NotConfigured +from scrapy.utils.test import get_crawler class SpiderStateTest(unittest.TestCase): @@ -34,3 +36,7 @@ class SpiderStateTest(unittest.TestCase): ss.spider_opened(spider) self.assertEqual(spider.state, {}) ss.spider_closed(spider) + + def test_not_configured(self): + crawler = get_crawler(Spider) + self.assertRaises(NotConfigured, SpiderState.from_crawler, crawler)