From 959953b45bab477919a411c57a97bb7a3d9818a4 Mon Sep 17 00:00:00 2001
From: martinRenou <martin.renou@isae.fr>
Date: Wed, 19 Jul 2017 15:36:54 +0100
Subject: [PATCH] Raise exception when version not specified

---
 .../tests/fixtures/test_csv_corrupted.json    | 37 +++++++++++++++++++
 force_bdss/cli/tests/test_execution.py        |  6 +++
 force_bdss/core_mco_driver.py                 |  6 ++-
 force_bdss/workspecs/workflow.py              | 12 +++++-
 4 files changed, 59 insertions(+), 2 deletions(-)
 create mode 100644 force_bdss/cli/tests/fixtures/test_csv_corrupted.json

diff --git a/force_bdss/cli/tests/fixtures/test_csv_corrupted.json b/force_bdss/cli/tests/fixtures/test_csv_corrupted.json
new file mode 100644
index 0000000..d09b6f7
--- /dev/null
+++ b/force_bdss/cli/tests/fixtures/test_csv_corrupted.json
@@ -0,0 +1,37 @@
+{
+  "multi_criteria_optimizer": {
+    "id": "force.bdss.bundles.enthought.dakota",
+    "model_data": {
+      "value_types": ["DUMMY"]
+    }
+  },
+  "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"
+      }
+    }
+  ]
+}
diff --git a/force_bdss/cli/tests/test_execution.py b/force_bdss/cli/tests/test_execution.py
index 9777a04..d511f79 100644
--- a/force_bdss/cli/tests/test_execution.py
+++ b/force_bdss/cli/tests/test_execution.py
@@ -31,6 +31,12 @@ class TestExecution(unittest.TestCase):
             with self.assertRaises(subprocess.CalledProcessError):
                 subprocess.check_call(["force_bdss", "test_csv_v2.json"])
 
+    def test_corrupted_file_input(self):
+        with cd(fixture_dir()):
+            with self.assertRaises(subprocess.CalledProcessError):
+                subprocess.check_call(["force_bdss",
+                                       "test_csv_corrupted.json"])
+
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index 0b76211..3be63d9 100644
--- a/force_bdss/core_mco_driver.py
+++ b/force_bdss/core_mco_driver.py
@@ -3,7 +3,8 @@ import sys
 from traits.api import on_trait_change
 
 from force_bdss.base_core_driver import BaseCoreDriver
-from force_bdss.workspecs.workflow import InvalidVersionException
+from force_bdss.workspecs.workflow import (InvalidVersionException,
+                                           CorruptedInputFile)
 
 
 class CoreMCODriver(BaseCoreDriver):
@@ -18,6 +19,9 @@ class CoreMCODriver(BaseCoreDriver):
         except InvalidVersionException as e:
             print e.message
             sys.exit(1)
+        except CorruptedInputFile as e:
+            print e.message
+            sys.exit(1)
 
         mco_data = workflow.multi_criteria_optimizer
         mco_bundle = self.bundle_registry.mco_bundle_by_id(mco_data.id)
diff --git a/force_bdss/workspecs/workflow.py b/force_bdss/workspecs/workflow.py
index 66aa30f..e49a81e 100644
--- a/force_bdss/workspecs/workflow.py
+++ b/force_bdss/workspecs/workflow.py
@@ -11,6 +11,10 @@ class InvalidVersionException(Exception):
     pass
 
 
+class CorruptedInputFile(Exception):
+    pass
+
+
 class Workflow(HasStrictTraits):
     name = String()
     multi_criteria_optimizer = Instance(MultiCriteriaOptimizer)
@@ -19,7 +23,13 @@ class Workflow(HasStrictTraits):
 
     @classmethod
     def from_json(cls, json_data):
-        if json_data["version"] not in SUPPORTED_FILE_VERSIONS:
+        try:
+            version = json_data["version"]
+        except KeyError:
+            raise CorruptedInputFile("Corrupted input file, no version"
+                                     " specified")
+
+        if version not in SUPPORTED_FILE_VERSIONS:
             raise InvalidVersionException(
                 "File version {} not supported".format(json_data["version"]))
 
-- 
GitLab