Skip to content
Snippets Groups Projects
Commit c2ba22cd authored by Stefano Borini's avatar Stefano Borini Committed by GitHub
Browse files

Merge pull request #66 from force-h2020/65-bug-write-empty-mco

Fixes inability to write workflow with unspecified mco
parents be9184f6 77c4e063
No related branches found
No related tags found
No related merge requests found
...@@ -52,6 +52,7 @@ class TestWorkflowWriter(unittest.TestCase): ...@@ -52,6 +52,7 @@ class TestWorkflowWriter(unittest.TestCase):
fp = StringIO() fp = StringIO()
wf = self._create_mock_workflow() wf = self._create_mock_workflow()
wfwriter.write(wf, fp) wfwriter.write(wf, fp)
print(fp.getvalue())
fp.seek(0) fp.seek(0)
wfreader = WorkflowReader(self.mock_registry) wfreader = WorkflowReader(self.mock_registry)
wf_result = wfreader.read(fp) wf_result = wfreader.read(fp)
...@@ -73,3 +74,13 @@ class TestWorkflowWriter(unittest.TestCase): ...@@ -73,3 +74,13 @@ class TestWorkflowWriter(unittest.TestCase):
) )
] ]
return wf return wf
def test_write_and_read_empty_workflow(self):
wf = Workflow()
wfwriter = WorkflowWriter()
fp = StringIO()
wfwriter.write(wf, fp)
fp.seek(0)
wfreader = WorkflowReader(self.mock_registry)
wf_result = wfreader.read(fp)
self.assertIsNone(wf_result.mco)
...@@ -19,17 +19,34 @@ class WorkflowWriter(HasStrictTraits): ...@@ -19,17 +19,34 @@ class WorkflowWriter(HasStrictTraits):
""" """
data = { data = {
"version": "1", "version": "1",
"workflow": {}
} }
wf_data = data["workflow"] data["workflow"] = self._workflow_data(workflow)
wf_data["mco"] = { json.dump(data, f)
"id": workflow.mco.bundle.id,
"model_data": workflow.mco.__getstate__() def _workflow_data(self, workflow):
workflow_data = {
"mco": self._mco_data(workflow.mco),
"kpi_calculators": [
self._bundle_model_data(kpic)
for kpic in workflow.kpi_calculators],
"data_sources": [
self._bundle_model_data(ds)
for ds in workflow.data_sources]
} }
return workflow_data
def _mco_data(self, mco):
"""Extracts the data from the MCO object and returns its dictionary.
If the MCO is None, returns None"""
if mco is None:
return None
data = self._bundle_model_data(mco)
parameters_data = [] parameters_data = []
for param in wf_data["mco"]["model_data"]["parameters"]: # noqa for param in data["model_data"]["parameters"]:
parameters_data.append( parameters_data.append(
{ {
"id": param.factory.id, "id": param.factory.id,
...@@ -37,24 +54,14 @@ class WorkflowWriter(HasStrictTraits): ...@@ -37,24 +54,14 @@ class WorkflowWriter(HasStrictTraits):
} }
) )
wf_data["mco"]["model_data"]["parameters"] = parameters_data # noqa data["model_data"]["parameters"] = parameters_data
return data
kpic_data = []
for kpic in workflow.kpi_calculators:
kpic_data.append({
"id": kpic.bundle.id,
"model_data": kpic.__getstate__()}
)
wf_data["kpi_calculators"] = kpic_data
ds_data = []
for ds in workflow.data_sources:
ds_data.append({
"id": ds.bundle.id,
"model_data": ds.__getstate__()
})
wf_data["data_sources"] = ds_data def _bundle_model_data(self, bundle_model):
"""
json.dump(data, f) Extracts the data from a bundle model and returns its dictionary
"""
return {
"id": bundle_model.bundle.id,
"model_data": bundle_model.__getstate__()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment