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

Merge pull request #29 from force-h2020/extract-io-layer

Extract io layer to writer/reader class
parents 3b55f0fc d6a4ae2a
No related branches found
No related tags found
No related merge requests found
from traits.api import HasStrictTraits, Instance, String, List from traits.api import HasStrictTraits, Instance, List
from force_bdss.workspecs.data_source import DataSource from ..data_sources.base_data_source_model import BaseDataSourceModel
from force_bdss.workspecs.kpi_calculator import KPICalculator from ..kpi.base_kpi_calculator_model import BaseKPICalculatorModel
from .multi_criteria_optimizer import MultiCriteriaOptimizer from ..mco.base_mco_model import BaseMCOModel
SUPPORTED_FILE_VERSIONS = ["1"]
class InvalidFileException(Exception):
pass
class InvalidVersionException(InvalidFileException):
pass
class Workflow(HasStrictTraits): class Workflow(HasStrictTraits):
name = String() """Model object that represents the Workflow as a whole"""
multi_criteria_optimizer = Instance(MultiCriteriaOptimizer) #: Contains the bundle-specific MCO Model object.
data_sources = List(DataSource) #: Can be None if no MCO has been specified yet.
kpi_calculators = List(KPICalculator) multi_criteria_optimizer = Instance(BaseMCOModel, allow_none=True)
@classmethod #: Contains the bundle-specific DataSource Model objects.
def from_json(cls, json_data): #: The list can be empty
try: data_sources = List(BaseDataSourceModel)
version = json_data["version"]
except KeyError: #: Contains the bundle-specific KPI Calculator Model objects.
raise InvalidFileException("Corrupted input file, no version" #: The list can be empty
" specified") kpi_calculators = List(BaseKPICalculatorModel)
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"]
),
data_sources=[
DataSource.from_json(data_source_data)
for data_source_data in json_data["data_sources"]],
kpi_calculators=[
KPICalculator.from_json(kpi_calculator_data)
for kpi_calculator_data in json_data["kpi_calculators"]]
)
return self
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