Merge pull request #1725 from redapple/spiderstate-notconfigured

[MRG+1] Disable SpiderState extension if no JOBDIR set
This commit is contained in:
Daniel Graña 2016-01-26 14:32:17 -03:00
commit 85f0596c43
2 changed files with 12 additions and 1 deletions

View File

@ -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

View File

@ -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)