From cc2f3e1b46b6036fa78bdcc7686bd4ffa3774dbf Mon Sep 17 00:00:00 2001 From: Mikhail Korobov Date: Wed, 3 Jun 2015 04:26:20 +0500 Subject: [PATCH 1/2] TST a test case to show custom_settings doesn't always work --- tests/test_crawler.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/test_crawler.py b/tests/test_crawler.py index 53f517c27..1c0804675 100644 --- a/tests/test_crawler.py +++ b/tests/test_crawler.py @@ -1,11 +1,13 @@ import warnings import unittest +import scrapy from scrapy.crawler import Crawler, CrawlerRunner, CrawlerProcess from scrapy.settings import Settings, default_settings from scrapy.spiderloader import SpiderLoader from scrapy.utils.spider import DefaultSpider from scrapy.utils.misc import load_object +from scrapy.extensions.throttle import AutoThrottle class CrawlerTestCase(unittest.TestCase): @@ -52,6 +54,18 @@ class CrawlerTestCase(unittest.TestCase): self.assertIsInstance(crawler.settings, Settings) +class SpiderSettingsTestCase(unittest.TestCase): + def test_spider_custom_settings(self): + class MySpider(scrapy.Spider): + name = 'spider' + custom_settings = { + 'AUTOTHROTTLE_ENABLED': True + } + + crawler = Crawler(MySpider, {}) + enabled_exts = [e.__class__ for e in crawler.extensions.middlewares] + self.assertIn(AutoThrottle, enabled_exts) + class SpiderLoaderWithWrongInterface(object): From d42c420a6d45a818f59db71a3f9b30d88625598b Mon Sep 17 00:00:00 2001 From: Mikhail Korobov Date: Wed, 3 Jun 2015 04:29:10 +0500 Subject: [PATCH 2/2] fixed spider custom_settings https://github.com/scrapy/scrapy/pull/1128 moved spidercls.update_settings call to a later stage; this commit moves it back. --- scrapy/crawler.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scrapy/crawler.py b/scrapy/crawler.py index 2cd658276..204395c77 100644 --- a/scrapy/crawler.py +++ b/scrapy/crawler.py @@ -29,6 +29,7 @@ class Crawler(object): self.spidercls = spidercls self.settings = settings.copy() + self.spidercls.update_settings(self.settings) self.signals = SignalManager(self) self.stats = load_object(self.settings['STATS_CLASS'])(self) @@ -44,9 +45,7 @@ class Crawler(object): self.logformatter = lf_cls.from_crawler(self) self.extensions = ExtensionManager.from_crawler(self) - self.spidercls.update_settings(self.settings) self.settings.freeze() - self.crawling = False self.spider = None self.engine = None