Verify SPIDER_MANAGER_CLASS interface in CrawlerRunner

This commit is contained in:
Julia Medina 2015-04-10 13:43:33 -03:00
parent f8ca5d1092
commit 24a07fd892
2 changed files with 20 additions and 0 deletions

View File

@ -3,9 +3,11 @@ import signal
import warnings
from twisted.internet import reactor, defer
from zope.interface.verify import verifyClass
from scrapy.core.engine import ExecutionEngine
from scrapy.resolver import CachingThreadedResolver
from scrapy.interfaces import ISpiderManager
from scrapy.extension import ExtensionManager
from scrapy.signalmanager import SignalManager
from scrapy.exceptions import ScrapyDeprecationWarning
@ -78,6 +80,7 @@ class CrawlerRunner(object):
def __init__(self, settings):
self.settings = settings
smcls = load_object(settings['SPIDER_MANAGER_CLASS'])
verifyClass(ISpiderManager, smcls)
self.spiders = smcls.from_settings(settings.frozencopy())
self.crawlers = set()
self._active = set()

View File

@ -2,6 +2,7 @@ import warnings
import unittest
from twisted.internet import defer
from zope.interface.verify import DoesNotImplement
from scrapy.crawler import Crawler, CrawlerRunner
from scrapy.settings import Settings
@ -42,3 +43,19 @@ class CrawlerTestCase(unittest.TestCase):
self.assertFalse(settings.frozen)
self.assertTrue(crawler.settings.frozen)
def SpiderManagerWithWrongInterface(object):
def unneeded_method(self):
pass
class CrawlerRunnerTestCase(unittest.TestCase):
def test_spider_manager_verify_interface(self):
settings = Settings({
'SPIDER_MANAGER_CLASS': 'tests.test_crawler.SpiderManagerWithWrongInterface'
})
with self.assertRaises(DoesNotImplement):
CrawlerRunner(settings)