Per-spider settings implementation

This commit is contained in:
Julia Medina 2014-08-13 01:41:16 -03:00 committed by Daniel Graña
parent ccde3317d7
commit 4932ec43a7
3 changed files with 12 additions and 1 deletions

View File

@ -96,7 +96,12 @@ class CrawlerRunner(object):
def _create_crawler(self, spidercls):
if isinstance(spidercls, six.string_types):
spidercls = self.spiders.load(spidercls)
crawler = Crawler(spidercls, self.settings.frozencopy())
crawler_settings = self.settings.copy()
spidercls.update_settings(crawler_settings)
crawler_settings.freeze()
crawler = Crawler(spidercls, crawler_settings)
return crawler
def stop(self):

View File

@ -15,6 +15,7 @@ SETTINGS_PRIORITIES = {
'default': 0,
'command': 10,
'project': 20,
'spider': 30,
'cmdline': 40,
}

View File

@ -20,6 +20,7 @@ class Spider(object_ref):
"""
name = None
custom_settings = {}
def __init__(self, name=None, **kwargs):
if name is not None:
@ -66,6 +67,10 @@ class Spider(object_ref):
def parse(self, response):
raise NotImplementedError
@classmethod
def update_settings(cls, settings):
settings.setdict(cls.custom_settings, priority='spider')
@classmethod
def handles_request(cls, request):
return url_is_from_spider(request.url, cls)