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": {
"id": "force.bdss.bundles.enthought.dakota",
"model_data": {
......@@ -35,4 +36,3 @@
}
]
}
{
}
{
"version": "2"
}
......@@ -6,7 +6,7 @@ from contextlib import contextmanager
@contextmanager
def cd(dir):
cwd = os.curdir
cwd = os.getcwd()
os.chdir(dir)
try:
yield
......@@ -26,6 +26,17 @@ class TestExecution(unittest.TestCase):
out = subprocess.check_call(["force_bdss", "test_csv.json"])
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__':
unittest.main()
from __future__ import print_function
import sys
from traits.api import on_trait_change
from force_bdss.base_core_driver import BaseCoreDriver
from force_bdss.workspecs.workflow import (InvalidVersionException,
InvalidFileException)
class CoreMCODriver(BaseCoreDriver):
......@@ -10,7 +16,11 @@ class CoreMCODriver(BaseCoreDriver):
@on_trait_change("application:started")
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_bundle = self.bundle_registry.mco_bundle_by_id(mco_data.id)
......
......@@ -4,6 +4,16 @@ from force_bdss.workspecs.data_source import DataSource
from force_bdss.workspecs.kpi_calculator import KPICalculator
from .multi_criteria_optimizer import MultiCriteriaOptimizer
SUPPORTED_FILE_VERSIONS = ["1"]
class InvalidFileException(Exception):
pass
class InvalidVersionException(InvalidFileException):
pass
class Workflow(HasStrictTraits):
name = String()
......@@ -13,9 +23,19 @@ class Workflow(HasStrictTraits):
@classmethod
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(
multi_criteria_optimizer=MultiCriteriaOptimizer.from_json(
json_data["multi_criteria_optimizer"]
json_data["multi_criteria_optimizer"]
),
data_sources=[
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