From d02dfbc1990be8e2cdcb8e4e99bbe2ee71edfc0d Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Thu, 20 Jul 2017 10:06:09 +0100
Subject: [PATCH] Introduced "workflow" key in the json dump

---
 force_bdss/cli/tests/fixtures/test_csv.json   | 62 ++++++++++---------
 .../cli/tests/fixtures/test_csv_v2.json       |  4 +-
 force_bdss/io/tests/test_workflow_reader.py   |  3 +-
 force_bdss/io/workflow_reader.py              | 10 +--
 4 files changed, 43 insertions(+), 36 deletions(-)

diff --git a/force_bdss/cli/tests/fixtures/test_csv.json b/force_bdss/cli/tests/fixtures/test_csv.json
index b58994d..1c15b0f 100644
--- a/force_bdss/cli/tests/fixtures/test_csv.json
+++ b/force_bdss/cli/tests/fixtures/test_csv.json
@@ -1,38 +1,40 @@
 {
   "version": "1",
-  "multi_criteria_optimizer": {
-    "id": "force.bdss.bundles.enthought.dakota",
-    "model_data": {
-      "value_types": ["DUMMY"]
-    }
-  },
-  "data_sources": [
-    {
-      "id": "force.bdss.bundles.enthought.csv_extractor",
+  "workflow": {
+    "multi_criteria_optimizer": {
+      "id": "force.bdss.bundles.enthought.dakota",
       "model_data": {
-        "filename": "foo.csv",
-        "row": 3,
-        "column": 5,
-        "cuba_type": "PRESSURE"
+        "value_types": ["DUMMY"]
       }
     },
-    {
-      "id": "force.bdss.bundles.enthought.csv_extractor",
-      "model_data": {
-        "filename": "foo.csv",
-        "row": 3,
-        "column": 5,
-        "cuba_type": "PRESSURE"
+    "data_sources": [
+      {
+        "id": "force.bdss.bundles.enthought.csv_extractor",
+        "model_data": {
+          "filename": "foo.csv",
+          "row": 3,
+          "column": 5,
+          "cuba_type": "PRESSURE"
+        }
+      },
+      {
+        "id": "force.bdss.bundles.enthought.csv_extractor",
+        "model_data": {
+          "filename": "foo.csv",
+          "row": 3,
+          "column": 5,
+          "cuba_type": "PRESSURE"
+        }
       }
-    }
-  ],
-  "kpi_calculators": [
-    {
-      "id": "force.bdss.bundles.enthought.kpi_adder",
-      "model_data": {
-        "cuba_type_in": "PRESSURE",
-        "cuba_type_out": "TOTAL_PRESSURE"
+    ],
+    "kpi_calculators": [
+      {
+        "id": "force.bdss.bundles.enthought.kpi_adder",
+        "model_data": {
+          "cuba_type_in": "PRESSURE",
+          "cuba_type_out": "TOTAL_PRESSURE"
+        }
       }
-    }
-  ]
+    ]
+  }
 }
diff --git a/force_bdss/cli/tests/fixtures/test_csv_v2.json b/force_bdss/cli/tests/fixtures/test_csv_v2.json
index a6963bb..2479fa8 100644
--- a/force_bdss/cli/tests/fixtures/test_csv_v2.json
+++ b/force_bdss/cli/tests/fixtures/test_csv_v2.json
@@ -1,3 +1,5 @@
 {
-  "version": "2"
+  "version": "2",
+  "workflow": {
+  }
 }
diff --git a/force_bdss/io/tests/test_workflow_reader.py b/force_bdss/io/tests/test_workflow_reader.py
index 46ab124..53c73f4 100644
--- a/force_bdss/io/tests/test_workflow_reader.py
+++ b/force_bdss/io/tests/test_workflow_reader.py
@@ -24,7 +24,8 @@ class TestWorkflowReader(unittest.TestCase):
 
     def test_invalid_version(self):
         data = {
-            "version": "2"
+            "version": "2",
+            "workflow": {}
         }
 
         with self.assertRaises(InvalidVersionException):
diff --git a/force_bdss/io/workflow_reader.py b/force_bdss/io/workflow_reader.py
index db64510..5b4dab2 100644
--- a/force_bdss/io/workflow_reader.py
+++ b/force_bdss/io/workflow_reader.py
@@ -47,12 +47,14 @@ class WorkflowReader(HasStrictTraits):
         wf = Workflow()
 
         try:
-            wf.multi_criteria_optimizer = self._extract_mco(json_data)
-            wf.data_sources[:] = self._extract_data_sources(json_data)
-            wf.kpi_calculators[:] = self._extract_kpi_calculators(json_data)
+            workflow_data = json_data["workflow"]
+            wf.multi_criteria_optimizer = self._extract_mco(workflow_data)
+            wf.data_sources[:] = self._extract_data_sources(workflow_data)
+            wf.kpi_calculators[:] = self._extract_kpi_calculators(workflow_data)
         except KeyError as e:
             logging.exception("Could not read file")
-            raise InvalidFileException("Could not read file. {}".format(e))
+            raise InvalidFileException("Could not read file. "
+                                       "Unable to find key {}".format(e))
 
     def _extract_mco(self, json_data):
         registry = self.bundle_registry
-- 
GitLab