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

More basic implementation, with support for workflow file

parent db1c4628
No related branches found
No related tags found
1 merge request!2Prototype using envisage plugins
{
"multi_criteria_optimization": {
"type": "simple"
}
}
# Enthought library imports.
from envisage.api import Application
# Application entry point.
from force_bdss.multi_criteria_optimizers_plugin import \
MultiCriteriaOptimizersPlugin
from force_bdss.workflow_plugin import WorkflowPlugin
from force_bdss.key_performance_calculators_plugin import \
KeyPerformanceCalculatorsPlugin
def run():
application = Application(
id='force',
plugins=[
WorkflowPlugin(),
MultiCriteriaOptimizersPlugin(),
KeyPerformanceCalculatorsPlugin(),
]
)
# Run it!
application.run()
......@@ -5,5 +5,5 @@ from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator
@provides(IKeyPerformanceCalculator)
class BasicKeyPerformanceCalculator(HasStrictTraits):
def run(self):
print("Computing basic key performance indicator")
def run(self, workflow):
print("Computing basic key performance indicator, {}".format(workflow))
......@@ -5,5 +5,5 @@ from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
@provides(IMultiCriteriaOptimizer)
class BasicMultiCriteriaOptimizer(HasStrictTraits):
def run(self):
print("Basic multicriteria optimizer in action")
def run(self, workflow):
print("Basic multicriteria optimizer in action, {}".format(workflow))
import json
from envisage.api import Application
from traits.api import Unicode
from traits.trait_types import List, Bool, Instance
from force_bdss.workspecs.workflow import Workflow
class BDSSApplication(Application):
id = "force_bdss.bdss_application"
workflow_filepath = Unicode()
workflow = Instance(Workflow)
evaluate = Bool()
def _workflow_default(self):
with open(self.workflow_filepath) as f:
return Workflow.from_json(json.load(f))
import click
from envisage.core_plugin import CorePlugin
import logging
from force_bdss.bdss_application import BDSSApplication
from force_bdss.core_mco_driver import CoreMCODriver
from force_bdss.multi_criteria_optimizers_plugin import \
MultiCriteriaOptimizersPlugin
from force_bdss.key_performance_calculators_plugin import \
KeyPerformanceCalculatorsPlugin
@click.command()
@click.option("--evaluate", is_flag=True)
@click.argument('workflow_filepath', type=click.Path(exists=True))
def run(evaluate, workflow_filepath):
plugins = [
CorePlugin(),
CoreMCODriver(),
KeyPerformanceCalculatorsPlugin(),
MultiCriteriaOptimizersPlugin(),
]
application = BDSSApplication(
plugins=plugins,
evaluate=evaluate,
workflow_filepath=workflow_filepath
)
application.run()
from envisage.extension_point import ExtensionPoint
from traits.api import List
from envisage.plugin import Plugin
from traits.api import on_trait_change
from traits.has_traits import on_trait_change
from traits.trait_types import List
from force_bdss.i_key_performance_calculator import IKeyPerformanceCalculator
from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
class WorkflowPlugin(Plugin):
id = "force_bdss.workflow_plugin"
class CoreMCODriver(Plugin):
multi_criteria_optimizers = ExtensionPoint(
List(IMultiCriteriaOptimizer),
id='force_bdss.multi_criteria_optimizers')
key_performance_calculators = ExtensionPoint(
List(IKeyPerformanceCalculator),
id='force_bdss.key_performance_calculators')
multi_criteria_optimizers = ExtensionPoint(
List(IMultiCriteriaOptimizer),
id='force_bdss.multi_criteria_optimizers')
@on_trait_change("application:started")
def application_started(self):
for mco in self.multi_criteria_optimizers:
mco.run()
for kpc in self.key_performance_calculators:
kpc.run()
if self.application.evaluate:
for kpi in self.key_performance_calculators:
kpi.run(self.application.workflow)
else:
for mco in self.multi_criteria_optimizers:
mco.run(self.application.workflow)
......@@ -7,7 +7,6 @@ from force_bdss.i_multi_criteria_optimizers import IMultiCriteriaOptimizer
class MultiCriteriaOptimizersPlugin(Plugin):
id = "force_bdss.multi_criteria_optimizers_plugin"
multi_criteria_optimizers = List(
......
from traits.api import HasStrictTraits, String
class MultiCriteriaOptimization(HasStrictTraits):
type = String
@classmethod
def from_json(cls, json_data):
self = cls(
type=json_data["type"]
)
return self
from traits.api import HasStrictTraits, Instance, String
from .multi_criteria_optimization import MultiCriteriaOptimization
class Workflow(HasStrictTraits):
name = String()
multi_criteria_optimization = Instance(MultiCriteriaOptimization)
@classmethod
def from_json(cls, json_data):
self = cls(
multi_criteria_optimization=MultiCriteriaOptimization.from_json(
json_data["multi_criteria_optimization"]
)
)
return self
......@@ -7,9 +7,10 @@ setup(
version=VERSION,
entry_points={
'console_scripts': [
'force_bdss = force_bdss.application:run',
'force_bdss = force_bdss.cli.force_bdss:run',
]},
install_requires=[
"envisage >= 4.6.0"
"envisage >= 4.6.0",
"click >= 6.7"
]
)
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