From 8cea6079f2b7838a819bd59360bb2835c2127d89 Mon Sep 17 00:00:00 2001 From: Viktor Shlapakov Date: Wed, 5 Dec 2018 18:49:15 +0300 Subject: [PATCH] Add an option to schedule latest version at runtime --- scrapinghub/client/jobs.py | 6 +++++- .../client/cassetes/test_job/test_job_start_latest.gz | 1 + tests/client/test_job.py | 10 ++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 tests/client/cassetes/test_job/test_job_start_latest.gz diff --git a/scrapinghub/client/jobs.py b/scrapinghub/client/jobs.py index ede72cb8..f2afe7c2 100644 --- a/scrapinghub/client/jobs.py +++ b/scrapinghub/client/jobs.py @@ -189,7 +189,7 @@ def list(self, count=None, start=None, spider=None, state=None, def run(self, spider=None, units=None, priority=None, meta=None, add_tag=None, job_args=None, job_settings=None, cmd_args=None, - **params): + latest=False, **params): """Schedule a new job and returns its job key. :param spider: a spider name string @@ -201,6 +201,7 @@ def run(self, spider=None, units=None, priority=None, meta=None, :param job_args: (optional) a dictionary with job arguments. :param job_settings: (optional) a dictionary with job settings. :param cmd_args: (optional) a string with script command args. + :param latest: (optional) a flag to run latest deploy at runtime :param \*\*params: (optional) additional keyword args. :return: a job instance, representing the scheduled job. @@ -222,6 +223,9 @@ def run(self, spider=None, units=None, priority=None, meta=None, cleaned_args = {k: v for k, v in job_args.items() if k not in params} params.update(cleaned_args) + if latest: + meta = meta or {} + meta['deploy_id'] = 'latest' params['project'] = self.project_id params['spider'] = spider or self.spider.name diff --git a/tests/client/cassetes/test_job/test_job_start_latest.gz b/tests/client/cassetes/test_job/test_job_start_latest.gz new file mode 100644 index 00000000..a1973936 --- /dev/null +++ b/tests/client/cassetes/test_job/test_job_start_latest.gz @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/tests/client/test_job.py b/tests/client/test_job.py index 911da38a..bcbf2f28 100644 --- a/tests/client/test_job.py +++ b/tests/client/test_job.py @@ -53,6 +53,16 @@ def test_job_start(spider): assert job.metadata.get('priority') == 2 +def test_job_start_latest(spider): + job1 = spider.jobs.run() + job1.finish() + assert job1.metadata.get('version') == 'test-version' + assert job1.metadata.get('deploy_id') == 1 + job2 = spider.jobs.run(latest=True) + assert job2.metadata.get('version') is None + assert job2.metadata.get('deploy_id') is None + + def test_job_start_extras(spider): job = spider.jobs.run() extras = {