From 075a2d62d32fff5c4ac34445901776512c9ca37a Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Sat, 27 Aug 2011 01:02:14 -0300 Subject: [PATCH] scrapyd: added support for passing custom settings to schedule.json --- scrapyd/tests/test_utils.py | 6 ++++++ scrapyd/utils.py | 4 ++++ scrapyd/webservice.py | 3 +++ 3 files changed, 13 insertions(+) diff --git a/scrapyd/tests/test_utils.py b/scrapyd/tests/test_utils.py index 624b82473..97652e000 100644 --- a/scrapyd/tests/test_utils.py +++ b/scrapyd/tests/test_utils.py @@ -22,6 +22,12 @@ class UtilsTest(unittest.TestCase): self.assertEqual(cargs, ['lala', '-a', 'arg1=val1']) assert all(isinstance(x, str) for x in cargs), cargs + def test_get_crawl_args_with_settings(self): + msg = {'_project': 'lolo', '_spider': 'lala', 'arg1': u'val1', 'settings': {'ONE': 'two'}} + cargs = get_crawl_args(msg) + self.assertEqual(cargs, ['lala', '-a', 'arg1=val1', '--set', 'ONE=two']) + assert all(isinstance(x, str) for x in cargs), cargs + class GetSpiderListTest(unittest.TestCase): def test_get_spider_list(self): diff --git a/scrapyd/utils.py b/scrapyd/utils.py index e18226072..188424d10 100644 --- a/scrapyd/utils.py +++ b/scrapyd/utils.py @@ -40,9 +40,13 @@ def get_crawl_args(message): msg = message.copy() args = [unicode_to_str(msg['_spider'])] del msg['_project'], msg['_spider'] + settings = msg.pop('settings', {}) for k, v in stringify_dict(msg, keys_only=False).items(): args += ['-a'] args += ['%s=%s' % (k, v)] + for k, v in stringify_dict(settings, keys_only=False).items(): + args += ['--set'] + args += ['%s=%s' % (k, v)] return args def get_spider_list(project, runner=None): diff --git a/scrapyd/webservice.py b/scrapyd/webservice.py index c9fd782bf..a6f9aaa21 100644 --- a/scrapyd/webservice.py +++ b/scrapyd/webservice.py @@ -23,9 +23,12 @@ class WsResource(JsonResource): class Schedule(WsResource): def render_POST(self, txrequest): + settings = txrequest.args.pop('setting', []) + settings = dict(x.split('=', 1) for x in settings) args = dict((k, v[0]) for k, v in txrequest.args.items()) project = args.pop('project') spider = args.pop('spider') + args['settings'] = settings jobid = uuid.uuid1().hex args['_job'] = jobid self.root.scheduler.schedule(project, spider, **args)