From 8a6bef5af40cfa8893f398a492d6750f9a30545d Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Wed, 12 May 2021 13:51:51 -0400 Subject: [PATCH 1/3] New service to get the `primary workflow` for a workflow_spec, using a workflow_spec_id. This is necessary because `primary` is a file parameter, not a workflow_spec parameter. - you can ask a workflow file whether it is primary, but - you cannot ask a workflow_spec for its primary workflow file Now, you can use `workflow_service.get_primary_workflow(workflow_spec_id)` --- crc/services/workflow_service.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crc/services/workflow_service.py b/crc/services/workflow_service.py index 101929d4..d0c314f1 100644 --- a/crc/services/workflow_service.py +++ b/crc/services/workflow_service.py @@ -22,7 +22,7 @@ from jinja2 import Template from crc import db, app from crc.api.common import ApiError from crc.models.api_models import Task, MultiInstanceType, WorkflowApi -from crc.models.file import LookupDataModel +from crc.models.file import LookupDataModel, FileModel from crc.models.study import StudyModel from crc.models.task_event import TaskEventModel from crc.models.user import UserModel, UserModelSchema @@ -811,3 +811,12 @@ class WorkflowService(object): def get_standalone_workflow_specs(): specs = db.session.query(WorkflowSpecModel).filter_by(standalone=True).all() return specs + + @staticmethod + def get_primary_workflow(workflow_spec_id): + # Returns the FileModel of the primary workflow for a workflow_spec + primary = None + file = db.session.query(FileModel).filter(FileModel.workflow_spec_id==workflow_spec_id, FileModel.primary==True).first() + if file: + primary = file + return primary From 8f8d9d30e43123610b81092bae28f126ae5d2f7b Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Wed, 12 May 2021 13:52:18 -0400 Subject: [PATCH 2/3] Added test for get_primary_workflow --- tests/workflow/test_workflow_service.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/workflow/test_workflow_service.py b/tests/workflow/test_workflow_service.py index a4af4edc..dc6eb01e 100644 --- a/tests/workflow/test_workflow_service.py +++ b/tests/workflow/test_workflow_service.py @@ -10,6 +10,7 @@ from example_data import ExampleDataLoader from crc import db from crc.models.task_event import TaskEventModel from crc.models.api_models import Task +from crc.models.file import FileModel from crc.api.common import ApiError @@ -114,3 +115,12 @@ class TestWorkflowService(BaseTest): result2 = WorkflowService.get_dot_value(path, {"a.b.c":"garbage"}) self.assertEqual("garbage", result2) + + def test_get_primary_workflow(self): + + workflow = self.create_workflow('hello_world') + workflow_spec_id = workflow.workflow_spec.id + primary_workflow = WorkflowService.get_primary_from_workflow_spec(workflow_spec_id) + self.assertIsInstance(primary_workflow, FileModel) + self.assertEqual(workflow_spec_id, primary_workflow.workflow_spec_id) + self.assertEqual('hello_world.bpmn', primary_workflow.name) From 4c8ea144357133bba01ffc921057b21cdb93baa1 Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Wed, 12 May 2021 14:07:54 -0400 Subject: [PATCH 3/3] Fixed test - changed the method name --- tests/workflow/test_workflow_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/workflow/test_workflow_service.py b/tests/workflow/test_workflow_service.py index dc6eb01e..cb4da9c2 100644 --- a/tests/workflow/test_workflow_service.py +++ b/tests/workflow/test_workflow_service.py @@ -120,7 +120,7 @@ class TestWorkflowService(BaseTest): workflow = self.create_workflow('hello_world') workflow_spec_id = workflow.workflow_spec.id - primary_workflow = WorkflowService.get_primary_from_workflow_spec(workflow_spec_id) + primary_workflow = WorkflowService.get_primary_workflow(workflow_spec_id) self.assertIsInstance(primary_workflow, FileModel) self.assertEqual(workflow_spec_id, primary_workflow.workflow_spec_id) self.assertEqual('hello_world.bpmn', primary_workflow.name)