From a27159e8e847e06a481d438aed3117a36a7a5138 Mon Sep 17 00:00:00 2001 From: Thomas Druez Date: Tue, 22 Sep 2020 13:10:58 +0400 Subject: [PATCH] Add support for "failed" task_output in Run.get_run_id method #17 Signed-off-by: Thomas Druez --- CHANGELOG.rst | 3 +++ scanpipe/models.py | 8 ++++---- scanpipe/tests/test_models.py | 20 ++++++++++++++++++-- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index da8e8b852..88e24b99a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,9 @@ ### v1.0.3 (unreleased) +- **ScanPipe** -- Add support for "failed" task_output in Run.get_run_id method + Fix for https://github.com/nexB/scancode.io/issues/17 + ### v1.0.2 (2020-09-18) - **ScanPipe** -- Add documentation and tutorial. diff --git a/scanpipe/models.py b/scanpipe/models.py index 44816e7e7..1c59ea155 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -304,10 +304,10 @@ def get_run_id(self): Return the run id from the task output. """ if self.task_output: - run_id_re = re.compile(r"run-id [0-9]+") - run_id_string = run_id_re.search(self.task_output).group() - if run_id_string: - return run_id_string.split()[-1] + run_id_pattern = re.compile(r"run-id (?P[0-9]+)") + match = run_id_pattern.search(self.task_output) + if match: + return match.group("run_id") class CodebaseResourceQuerySet(ProjectRelatedQuerySet): diff --git a/scanpipe/tests/test_models.py b/scanpipe/tests/test_models.py index 2c297ec7e..c56bc9dfc 100644 --- a/scanpipe/tests/test_models.py +++ b/scanpipe/tests/test_models.py @@ -122,19 +122,35 @@ def test_scanpipe_project_model_get_next_run(self): self.assertEqual(None, self.project1.get_next_run()) - def test_scanpipe_run_model_methods(self): + def test_scanpipe_run_model_task_methods(self): run1 = Run.objects.create(project=self.project1, pipeline="pipeline") - self.assertFalse(run1.task_succeeded) + run1.task_exitcode = 0 run1.save() self.assertTrue(run1.task_succeeded) + run1.task_exitcode = 1 + run1.save() + self.assertFalse(run1.task_succeeded) + + def test_scanpipe_run_model_get_run_id_method(self): + run1 = Run.objects.create(project=self.project1, pipeline="pipeline") + self.assertIsNone(run1.get_run_id()) + + run1.task_output = "Missing run-id" + run1.save() + self.assertIsNone(run1.get_run_id()) + run1.task_output = "Workflow starting (run-id 1593181041039832):" run1.save() self.assertEqual("1593181041039832", run1.get_run_id()) + run1.task_output = "(run-id 123) + (run-id 456)" + run1.save() + self.assertEqual("123", run1.get_run_id()) + def test_scanpipe_codebase_resource_model_methods(self): resource = CodebaseResource.objects.create( project=self.project1, path="filename.ext"