mirror of
https://github.com/scrapy/scrapy.git
synced 2025-02-28 18:38:43 +00:00
Merge pull request #330 from nramirezuy/spider-from_crawler
use from_crawler method if available in spiders
This commit is contained in:
commit
3eb5d5e931
@ -33,6 +33,7 @@ class SpiderManager(object):
|
||||
@classmethod
|
||||
def from_crawler(cls, crawler):
|
||||
sm = cls.from_settings(crawler.settings)
|
||||
sm.crawler = crawler
|
||||
crawler.signals.connect(sm.close_spider, signals.spider_closed)
|
||||
return sm
|
||||
|
||||
@ -41,7 +42,10 @@ class SpiderManager(object):
|
||||
spcls = self._spiders[spider_name]
|
||||
except KeyError:
|
||||
raise KeyError("Spider not found: %s" % spider_name)
|
||||
return spcls(**spider_kwargs)
|
||||
if hasattr(self, 'crawler') and hasattr(spcls, 'from_crawler'):
|
||||
return spcls.from_crawler(self.crawler, **spider_kwargs)
|
||||
else:
|
||||
return spcls(**spider_kwargs)
|
||||
|
||||
def find_by_request(self, request):
|
||||
return [name for name, cls in self._spiders.iteritems()
|
||||
|
@ -1,6 +1,5 @@
|
||||
import sys
|
||||
import os
|
||||
import weakref
|
||||
import shutil
|
||||
|
||||
from zope.interface.verify import verifyObject
|
||||
@ -9,7 +8,6 @@ from twisted.trial import unittest
|
||||
|
||||
# ugly hack to avoid cyclic imports of scrapy.spider when running this test
|
||||
# alone
|
||||
import scrapy.spider
|
||||
from scrapy.interfaces import ISpiderManager
|
||||
from scrapy.spidermanager import SpiderManager
|
||||
from scrapy.http import Request
|
||||
@ -36,7 +34,7 @@ class SpiderManagerTest(unittest.TestCase):
|
||||
|
||||
def test_list(self):
|
||||
self.assertEqual(set(self.spiderman.list()),
|
||||
set(['spider1', 'spider2', 'spider3']))
|
||||
set(['spider1', 'spider2', 'spider3', 'spider4']))
|
||||
|
||||
def test_create(self):
|
||||
spider1 = self.spiderman.create("spider1")
|
||||
@ -66,3 +64,7 @@ class SpiderManagerTest(unittest.TestCase):
|
||||
def test_load_base_spider(self):
|
||||
self.spiderman = SpiderManager(['scrapy.tests.test_spidermanager.test_spiders.spider0'])
|
||||
assert len(self.spiderman._spiders) == 0
|
||||
|
||||
def test_load_from_crawler(self):
|
||||
spider = self.spiderman.create('spider4', a='OK')
|
||||
self.assertEqual(spider.a, 'OK')
|
||||
|
10
scrapy/tests/test_spidermanager/test_spiders/spider4.py
Normal file
10
scrapy/tests/test_spidermanager/test_spiders/spider4.py
Normal file
@ -0,0 +1,10 @@
|
||||
from scrapy.spider import BaseSpider
|
||||
|
||||
class Spider4(BaseSpider):
|
||||
name = "spider4"
|
||||
|
||||
@classmethod
|
||||
def from_crawler(cls, crawler, **kwargs):
|
||||
o = cls(**kwargs)
|
||||
o.crawler = crawler
|
||||
return o
|
Loading…
x
Reference in New Issue
Block a user