From a1295724922529031c5e4693a01bc3ada55e2ce7 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Thu, 20 Jul 2017 17:40:37 +0100 Subject: [PATCH] Introduced base class for the bundles. --- force_bdss/api.py | 10 ++++--- .../csv_extractor/csv_extractor_bundle.py | 9 ++++--- .../dummy_kpi/kpi_adder/kpi_adder_bundle.py | 10 +++---- .../dummy_mco/dakota/dakota_bundle.py | 9 ++++--- .../data_sources/base_data_source_bundle.py | 27 +++++++++++++++++++ force_bdss/kpi/base_kpi_calculator_bundle.py | 19 +++++++++++++ force_bdss/kpi/i_kpi_calculator_bundle.py | 2 ++ .../base_multi_criteria_optimizer_bundle.py | 27 +++++++++++++++++++ .../mco/i_multi_criteria_optimizer_bundle.py | 2 ++ 9 files changed, 99 insertions(+), 16 deletions(-) create mode 100644 force_bdss/data_sources/base_data_source_bundle.py create mode 100644 force_bdss/kpi/base_kpi_calculator_bundle.py create mode 100644 force_bdss/mco/base_multi_criteria_optimizer_bundle.py diff --git a/force_bdss/api.py b/force_bdss/api.py index 1a5aeed..939e8cf 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 a44b5e1..55f998c 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 a06cf88..ab40c71 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 07e4dd3..e4d9f44 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 0000000..6ad3d76 --- /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 0000000..75705c7 --- /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 d4e8992..84b8f90 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 0000000..d44f387 --- /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 cb42229..24557e4 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 -- GitLab