diff --git a/force_bdss/api.py b/force_bdss/api.py index 1a5aeedfb60db42e6d1e728a3d5a15d64350fe00..939e8cf49e1d2d90bcb3aa451111a80cc2606399 100644 --- a/force_bdss/api.py +++ b/force_bdss/api.py @@ -1,15 +1,19 @@ from .base_extension_plugin import BaseExtensionPlugin # noqa from .id_generators import bundle_id # noqa -from .data_sources.i_data_source_bundle import IDataSourceBundle # noqa -from .mco.i_multi_criteria_optimizer_bundle import IMultiCriteriaOptimizerBundle # noqa -from .kpi.i_kpi_calculator_bundle import IKPICalculatorBundle # noqa + from .data_sources.base_data_source_model import BaseDataSourceModel # noqa from .data_sources.data_source_result import DataSourceResult # noqa from .data_sources.data_source_parameters import DataSourceParameters # noqa from .data_sources.base_data_source import BaseDataSource # noqa +from .data_sources.base_data_source_bundle import BaseDataSourceBundle # noqa + from .kpi.base_kpi_calculator import BaseKPICalculator # noqa from .kpi.kpi_calculator_result import KPICalculatorResult # noqa from .kpi.base_kpi_calculator_model import BaseKPICalculatorModel # noqa +from .kpi.base_kpi_calculator_bundle import BaseKPICalculatorBundle # noqa + from .mco.base_mco_model import BaseMCOModel # noqa from .mco.base_mco_communicator import BaseMCOCommunicator # noqa from .mco.base_multi_criteria_optimizer import BaseMultiCriteriaOptimizer # noqa +from .mco.base_multi_criteria_optimizer_bundle import BaseMultiCriteriaOptimizerBundle # noqa + diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py index a44b5e14b65970a1a62d26a7706469a60d13a679..55f998c49c4bfef7dfb37f93f61f3c435f00f518 100644 --- a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py @@ -1,15 +1,16 @@ -from traits.api import provides, HasStrictTraits, String +from traits.api import String -from force_bdss.api import bundle_id, IDataSourceBundle +from force_bdss.api import bundle_id, BaseDataSourceBundle from .csv_extractor_model import CSVExtractorModel from .csv_extractor_data_source import CSVExtractorDataSource -@provides(IDataSourceBundle) -class CSVExtractorBundle(HasStrictTraits): +class CSVExtractorBundle(BaseDataSourceBundle): id = String(bundle_id("enthought", "csv_extractor")) + name = String("CSV Extractor") + def create_model(self, model_data=None): if model_data is None: model_data = {} diff --git a/force_bdss/core_plugins/dummy_kpi/kpi_adder/kpi_adder_bundle.py b/force_bdss/core_plugins/dummy_kpi/kpi_adder/kpi_adder_bundle.py index a06cf885d4a2d581768da6c6b71a21e7208763c9..ab40c710bbbff3bbdd5c5a39d62b95414198fbc4 100644 --- a/force_bdss/core_plugins/dummy_kpi/kpi_adder/kpi_adder_bundle.py +++ b/force_bdss/core_plugins/dummy_kpi/kpi_adder/kpi_adder_bundle.py @@ -1,16 +1,16 @@ -from traits.api import provides, HasStrictTraits, String +from traits.api import String -from force_bdss.api import bundle_id -from force_bdss.api import IKPICalculatorBundle +from force_bdss.api import bundle_id, BaseKPICalculatorBundle from .kpi_adder_model import KPIAdderModel from .kpi_adder_calculator import KPIAdderCalculator -@provides(IKPICalculatorBundle) -class KPIAdderBundle(HasStrictTraits): +class KPIAdderBundle(BaseKPICalculatorBundle): id = String(bundle_id("enthought", "kpi_adder")) + name = String("KPI Adder") + def create_model(self, model_data=None): if model_data is None: model_data = {} diff --git a/force_bdss/core_plugins/dummy_mco/dakota/dakota_bundle.py b/force_bdss/core_plugins/dummy_mco/dakota/dakota_bundle.py index 07e4dd366a2c964cbf9de4dcace24170feb3bc6c..e4d9f441bf4dbcce63ac1de06a53a56dc35d693b 100644 --- a/force_bdss/core_plugins/dummy_mco/dakota/dakota_bundle.py +++ b/force_bdss/core_plugins/dummy_mco/dakota/dakota_bundle.py @@ -1,15 +1,16 @@ -from traits.api import HasStrictTraits, provides, String -from force_bdss.api import bundle_id, IMultiCriteriaOptimizerBundle +from traits.api import String +from force_bdss.api import bundle_id, BaseMultiCriteriaOptimizerBundle from .dakota_communicator import DakotaCommunicator from .dakota_model import DakotaModel from .dakota_optimizer import DakotaOptimizer -@provides(IMultiCriteriaOptimizerBundle) -class DakotaBundle(HasStrictTraits): +class DakotaBundle(BaseMultiCriteriaOptimizerBundle): id = String(bundle_id("enthought", "dakota")) + name = "Dakota" + def create_model(self, model_data=None): if model_data is None: model_data = {} diff --git a/force_bdss/data_sources/base_data_source_bundle.py b/force_bdss/data_sources/base_data_source_bundle.py new file mode 100644 index 0000000000000000000000000000000000000000..6ad3d7667a738d96eb7cfa0ac107c19a88de7b5b --- /dev/null +++ b/force_bdss/data_sources/base_data_source_bundle.py @@ -0,0 +1,27 @@ +import abc +from traits.api import ABCHasStrictTraits, provides, String + +from .i_data_source_bundle import IDataSourceBundle + + +@provides(IDataSourceBundle) +class BaseDataSourceBundle(ABCHasStrictTraits): + #: Unique identifier that identifies the bundle uniquely in the + #: universe of bundles. Create one with the function bundle_id() + id = String() + + #: A human readable name of the bundle + name = String() + + @abc.abstractmethod + def create_data_source(self, application, model): + """Factory method. + Must return the bundle-specific BaseDataSource instance. + """ + pass + + @abc.abstractmethod + def create_model(self, model_data=None): + """Factory method. + Must return the bundle-specific BaseDataSourceModel instance. + """ diff --git a/force_bdss/kpi/base_kpi_calculator_bundle.py b/force_bdss/kpi/base_kpi_calculator_bundle.py new file mode 100644 index 0000000000000000000000000000000000000000..75705c70f9f587ab1ea3a550a2f86bcb6e1dd564 --- /dev/null +++ b/force_bdss/kpi/base_kpi_calculator_bundle.py @@ -0,0 +1,19 @@ +import abc +from traits.api import ABCHasStrictTraits, provides, String + +from .i_kpi_calculator_bundle import IKPICalculatorBundle + + +@provides(IKPICalculatorBundle) +class BaseKPICalculatorBundle(ABCHasStrictTraits): + id = String() + + name = String() + + @abc.abstractmethod + def create_kpi_calculator(self, application, model): + pass + + @abc.abstractmethod + def create_model(self, model_data=None): + pass diff --git a/force_bdss/kpi/i_kpi_calculator_bundle.py b/force_bdss/kpi/i_kpi_calculator_bundle.py index d4e8992ba059883f1b8824eb74966f3cdb0222e3..84b8f90307b0ab11ded8c21fd8e152015c78421a 100644 --- a/force_bdss/kpi/i_kpi_calculator_bundle.py +++ b/force_bdss/kpi/i_kpi_calculator_bundle.py @@ -4,6 +4,8 @@ from traits.api import Interface, String class IKPICalculatorBundle(Interface): id = String() + name = String() + def create_kpi_calculator(self, application, model): pass diff --git a/force_bdss/mco/base_multi_criteria_optimizer_bundle.py b/force_bdss/mco/base_multi_criteria_optimizer_bundle.py new file mode 100644 index 0000000000000000000000000000000000000000..d44f3877d97bfc9e244a28614ccf14014643308d --- /dev/null +++ b/force_bdss/mco/base_multi_criteria_optimizer_bundle.py @@ -0,0 +1,27 @@ +import abc + +from traits.api import ABCHasStrictTraits, String +from traits.has_traits import provides + +from force_bdss.mco.i_multi_criteria_optimizer_bundle import ( + IMultiCriteriaOptimizerBundle +) + + +@provides(IMultiCriteriaOptimizerBundle) +class BaseMultiCriteriaOptimizerBundle(ABCHasStrictTraits): + id = String() + + name = String() + + @abc.abstractmethod + def create_optimizer(self, application, model): + pass + + @abc.abstractmethod + def create_model(self, model_data=None): + pass + + @abc.abstractmethod + def create_communicator(self, model_data): + pass diff --git a/force_bdss/mco/i_multi_criteria_optimizer_bundle.py b/force_bdss/mco/i_multi_criteria_optimizer_bundle.py index cb4222992cf0d7349a798e9747511c7c7e73b4d6..24557e42c39c27d3913dfb16913d3050b60fb4ab 100644 --- a/force_bdss/mco/i_multi_criteria_optimizer_bundle.py +++ b/force_bdss/mco/i_multi_criteria_optimizer_bundle.py @@ -4,6 +4,8 @@ from traits.api import Interface, String class IMultiCriteriaOptimizerBundle(Interface): id = String() + name = String() + def create_optimizer(self, application, model): pass