From cfb39de8d69dd0f3be78e4a4349c035b062438f8 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Thu, 10 Aug 2017 14:23:46 +0100 Subject: [PATCH] Added notification listeners to workflow, and associated IO --- force_bdss/core/workflow.py | 5 +++++ force_bdss/io/workflow_reader.py | 13 +++++++++++++ force_bdss/io/workflow_writer.py | 10 ++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/force_bdss/core/workflow.py b/force_bdss/core/workflow.py index d7cfb50..8cdb20c 100644 --- a/force_bdss/core/workflow.py +++ b/force_bdss/core/workflow.py @@ -3,6 +3,8 @@ from traits.api import HasStrictTraits, Instance, List from force_bdss.data_sources.base_data_source_model import BaseDataSourceModel from force_bdss.kpi.base_kpi_calculator_model import BaseKPICalculatorModel from force_bdss.mco.base_mco_model import BaseMCOModel +from force_bdss.notification_listeners.base_notification_listener_model \ + import BaseNotificationListenerModel class Workflow(HasStrictTraits): @@ -18,3 +20,6 @@ class Workflow(HasStrictTraits): #: Contains the factory-specific KPI Calculator Model objects. #: The list can be empty kpi_calculators = List(BaseKPICalculatorModel) + + #: Contains information about the listeners to be setup + notification_listeners = List(BaseNotificationListenerModel) diff --git a/force_bdss/io/workflow_reader.py b/force_bdss/io/workflow_reader.py index df20c76..f5dc86a 100644 --- a/force_bdss/io/workflow_reader.py +++ b/force_bdss/io/workflow_reader.py @@ -89,6 +89,7 @@ class WorkflowReader(HasStrictTraits): wf.mco = self._extract_mco(wf_data) wf.data_sources[:] = self._extract_data_sources(wf_data) wf.kpi_calculators[:] = self._extract_kpi_calculators(wf_data) + wf.notification_listeners[:] = self._extract_listeners(wf_data) except KeyError as e: logging.exception("Could not read file") raise InvalidFileException("Could not read file. " @@ -211,3 +212,15 @@ class WorkflowReader(HasStrictTraits): def _extract_input_slot_maps(self, maps_data): return [InputSlotMap(**d) for d in maps_data] + + def _extract_notification_listeners(self, wf_data): + registry = self.factory_registry + listeners = [] + for nl_entry in wf_data["notification_listeners"]: + nl_id = nl_entry["id"] + nl_factory = registry.notification_listener_factory_by_id(nl_id) + model_data = nl_entry["model_data"] + listeners.append(nl_factory.create_model(model_data)) + + return listeners + diff --git a/force_bdss/io/workflow_writer.py b/force_bdss/io/workflow_writer.py index 8335d5b..1e5abca 100644 --- a/force_bdss/io/workflow_writer.py +++ b/force_bdss/io/workflow_writer.py @@ -17,9 +17,7 @@ class WorkflowWriter(HasStrictTraits): A file object on which to write the workflow, properly serialized into JSON. """ - data = { - "version": "1", - } + data = dict(version=1) data["workflow"] = self._workflow_data(workflow) json.dump(data, f) @@ -32,7 +30,11 @@ class WorkflowWriter(HasStrictTraits): for kpic in workflow.kpi_calculators], "data_sources": [ self._model_data(ds) - for ds in workflow.data_sources] + for ds in workflow.data_sources], + "notification_listeners": [ + self._model_data(nl) + for nl in workflow.notification_listeners + ] } return workflow_data -- GitLab