mirror of https://github.com/scrapy/scrapy.git
Support passing all keyword arguments to ExecutionQueue append_spider_name and append_url
This commit is contained in:
parent
4eb0383dd2
commit
ffad8e08e7
|
|
@ -57,25 +57,29 @@ class ExecutionQueue(object):
|
|||
if spider:
|
||||
self.spider_requests.append((spider, [request]))
|
||||
|
||||
def append_url(self, url, spider=None, **kwargs):
|
||||
def append_url(self, url=None, spider=None, **kwargs):
|
||||
"""Append a URL to crawl with the given spider. If the spider is not
|
||||
given, a spider will be looked up based on the URL
|
||||
"""
|
||||
if url is None:
|
||||
raise ValueError("A url is required")
|
||||
if spider is None:
|
||||
spider = self._spiders.create_for_request(Request(url), **kwargs)
|
||||
if spider:
|
||||
requests = arg_to_iter(spider.make_requests_from_url(url))
|
||||
self.spider_requests.append((spider, requests))
|
||||
|
||||
def append_spider_name(self, spider_name, **spider_kwargs):
|
||||
def append_spider_name(self, name=None, **spider_kwargs):
|
||||
"""Append a spider to crawl given its name and optional arguments,
|
||||
which are used to instantiate it. The SpiderManager is used to lookup
|
||||
the spider
|
||||
"""
|
||||
if name is None:
|
||||
raise ValueError("A spider name is required")
|
||||
try:
|
||||
spider = self._spiders.create(spider_name, **spider_kwargs)
|
||||
spider = self._spiders.create(name, **spider_kwargs)
|
||||
except KeyError:
|
||||
log.msg('Unable to find spider: %s' % spider_name, log.ERROR)
|
||||
log.msg('Unable to find spider: %s' % name, log.ERROR)
|
||||
else:
|
||||
self.append_spider(spider)
|
||||
|
||||
|
|
|
|||
|
|
@ -71,6 +71,14 @@ class ExecutionQueueTest(unittest.TestCase):
|
|||
self._assert_request_urls(self.queue.spider_requests[0][1], \
|
||||
['http://www.example.com/asd/make1', 'http://www.example.com/asd/make2'])
|
||||
|
||||
def test_append_url_kwarg(self):
|
||||
spider = TestSpider()
|
||||
url = 'http://www.example.com/asd'
|
||||
self.queue.append_url(url=url, spider=spider)
|
||||
self.assert_(self.queue.spider_requests[0][0] is spider)
|
||||
self._assert_request_urls(self.queue.spider_requests[0][1], \
|
||||
['http://www.example.com/asd/make1', 'http://www.example.com/asd/make2'])
|
||||
|
||||
def test_append_url2(self):
|
||||
url = 'http://www.example.com/asd'
|
||||
self.queue.append_url(url, arg='123')
|
||||
|
|
@ -86,6 +94,12 @@ class ExecutionQueueTest(unittest.TestCase):
|
|||
self.assert_(spider.name == 'test123')
|
||||
self.assert_(spider.arg == '123')
|
||||
|
||||
def test_append_spider_name_kwarg(self):
|
||||
self.queue.append_spider_name(name='test123', arg='123')
|
||||
spider = self.queue.spider_requests[0][0]
|
||||
self.assert_(spider.name == 'test123')
|
||||
self.assert_(spider.arg == '123')
|
||||
|
||||
def _assert_request_urls(self, requests, urls):
|
||||
assert all(isinstance(x, Request) for x in requests)
|
||||
self.assertEqual([x.url for x in requests], urls)
|
||||
|
|
|
|||
Loading…
Reference in New Issue