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

Merge pull request #27 from force-h2020/add_file_version

Add file version handling for workflow file.
parents 5e7535ff a5fcda35
No related branches found
No related tags found
No related merge requests found
{ {
"version": "1",
"multi_criteria_optimizer": { "multi_criteria_optimizer": {
"id": "force.bdss.bundles.enthought.dakota", "id": "force.bdss.bundles.enthought.dakota",
"model_data": { "model_data": {
...@@ -35,4 +36,3 @@ ...@@ -35,4 +36,3 @@
} }
] ]
} }
{
}
{
"version": "2"
}
...@@ -6,7 +6,7 @@ from contextlib import contextmanager ...@@ -6,7 +6,7 @@ from contextlib import contextmanager
@contextmanager @contextmanager
def cd(dir): def cd(dir):
cwd = os.curdir cwd = os.getcwd()
os.chdir(dir) os.chdir(dir)
try: try:
yield yield
...@@ -26,6 +26,17 @@ class TestExecution(unittest.TestCase): ...@@ -26,6 +26,17 @@ class TestExecution(unittest.TestCase):
out = subprocess.check_call(["force_bdss", "test_csv.json"]) out = subprocess.check_call(["force_bdss", "test_csv.json"])
self.assertEqual(out, 0) self.assertEqual(out, 0)
def test_unsupported_file_input(self):
with cd(fixture_dir()):
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__': if __name__ == '__main__':
unittest.main() unittest.main()
from __future__ import print_function
import sys
from traits.api import on_trait_change from traits.api import on_trait_change
from force_bdss.base_core_driver import BaseCoreDriver from force_bdss.base_core_driver import BaseCoreDriver
from force_bdss.workspecs.workflow import (InvalidVersionException,
InvalidFileException)
class CoreMCODriver(BaseCoreDriver): class CoreMCODriver(BaseCoreDriver):
...@@ -10,7 +16,11 @@ class CoreMCODriver(BaseCoreDriver): ...@@ -10,7 +16,11 @@ class CoreMCODriver(BaseCoreDriver):
@on_trait_change("application:started") @on_trait_change("application:started")
def application_started(self): def application_started(self):
workflow = self.application.workflow try:
workflow = self.application.workflow
except (InvalidVersionException, InvalidFileException) as e:
print(str(e), file=sys.stderr)
sys.exit(1)
mco_data = workflow.multi_criteria_optimizer mco_data = workflow.multi_criteria_optimizer
mco_bundle = self.bundle_registry.mco_bundle_by_id(mco_data.id) mco_bundle = self.bundle_registry.mco_bundle_by_id(mco_data.id)
......
...@@ -4,6 +4,16 @@ from force_bdss.workspecs.data_source import DataSource ...@@ -4,6 +4,16 @@ from force_bdss.workspecs.data_source import DataSource
from force_bdss.workspecs.kpi_calculator import KPICalculator from force_bdss.workspecs.kpi_calculator import KPICalculator
from .multi_criteria_optimizer import MultiCriteriaOptimizer from .multi_criteria_optimizer import MultiCriteriaOptimizer
SUPPORTED_FILE_VERSIONS = ["1"]
class InvalidFileException(Exception):
pass
class InvalidVersionException(InvalidFileException):
pass
class Workflow(HasStrictTraits): class Workflow(HasStrictTraits):
name = String() name = String()
...@@ -13,9 +23,19 @@ class Workflow(HasStrictTraits): ...@@ -13,9 +23,19 @@ class Workflow(HasStrictTraits):
@classmethod @classmethod
def from_json(cls, json_data): def from_json(cls, json_data):
try:
version = json_data["version"]
except KeyError:
raise InvalidFileException("Corrupted input file, no version"
" specified")
if version not in SUPPORTED_FILE_VERSIONS:
raise InvalidVersionException(
"File version {} not supported".format(json_data["version"]))
self = cls( self = cls(
multi_criteria_optimizer=MultiCriteriaOptimizer.from_json( multi_criteria_optimizer=MultiCriteriaOptimizer.from_json(
json_data["multi_criteria_optimizer"] json_data["multi_criteria_optimizer"]
), ),
data_sources=[ data_sources=[
DataSource.from_json(data_source_data) DataSource.from_json(data_source_data)
......
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