diff --git a/scrapy/spiders/__init__.py b/scrapy/spiders/__init__.py index c08bb964a..4b2771415 100644 --- a/scrapy/spiders/__init__.py +++ b/scrapy/spiders/__init__.py @@ -75,9 +75,8 @@ class Spider(object_ref): def parse(self, response): raise NotImplementedError - @classmethod - def update_settings(cls, settings): - settings.setdict(cls.custom_settings or {}, priority='spider') + def update_settings(self, settings): + settings.setdict(self.custom_settings or {}, priority='spider') @classmethod def handles_request(cls, request): diff --git a/tests/test_spider.py b/tests/test_spider.py index 4d5d4b07e..63a3d2e61 100644 --- a/tests/test_spider.py +++ b/tests/test_spider.py @@ -98,11 +98,17 @@ class SpiderTest(unittest.TestCase): self.spider_class.custom_settings = spider_settings settings = Settings(project_settings, priority='project') - self.spider_class.update_settings(settings) + spider = self.spider_class('example.com') + spider.update_settings(settings) self.assertEqual(settings.get('TEST1'), 'spider') self.assertEqual(settings.get('TEST2'), 'spider') self.assertEqual(settings.get('TEST3'), 'project') + spider_instance_settings = {'TEST1': 'spider_instance'} + spider.custom_settings = spider_instance_settings + spider.update_settings(settings) + self.assertEqual(settings.get('TEST1'), 'spider_instance') + def test_logger(self): spider = self.spider_class('example.com') with LogCapture() as l: