diff --git a/force_bdss/base_extension_plugin.py b/force_bdss/base_extension_plugin.py new file mode 100644 index 0000000000000000000000000000000000000000..3627b137961a3dcea0fb44068d42abdcdd5e08e3 --- /dev/null +++ b/force_bdss/base_extension_plugin.py @@ -0,0 +1,41 @@ +from envisage.plugin import Plugin +from traits.trait_types import List + +from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle +from force_bdss.kpi.i_kpi_calculator_bundle import IKPICalculatorBundle +from force_bdss.mco.i_multi_criteria_optimizer_bundle import \ + IMultiCriteriaOptimizerBundle + + +class BaseExtensionPlugin(Plugin): + """Base class for extension plugins, that is, plugins that are + provided by external contributors. + + It provides a set of slots to be populated that end up contributing + to the application extension points. To use the class, simply inherit it + in your plugin, and then define the trait default initializer for the + specific trait you want to populate. For example:: + + class MyPlugin(BaseExtensionPlugin): + def _data_source_bundles(self): + return [MyDataSourceBundle1(), + MyDataSourceBundle2()] + """ + + #: A list of available Multi Criteria Optimizers this plugin exports. + mco_bundles = List( + IMultiCriteriaOptimizerBundle, + contributes_to='force.bdss.mco.bundles' + ) + + #: A list of the available Data Sources this plugin exports. + data_source_bundles = List( + IDataSourceBundle, + contributes_to='force.bdss.data_sources.bundles' + ) + + #: A list of the available KPI calculators this plugin exports. + kpi_calculator_bundles = List( + IKPICalculatorBundle, + contributes_to='force.bdss.kpi_calculators.bundles' + ) diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py b/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py index 2dcba7e3bfd078a88ba46a0f2d70b0768ef5801a..dad0765696765e252bd64f4a1dae365c3b341f31 100644 --- a/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py @@ -1,16 +1,8 @@ -from envisage.plugin import Plugin -from traits.api import List - -from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle +from force_bdss.base_extension_plugin import BaseExtensionPlugin from .csv_extractor.csv_extractor_bundle import CSVExtractorBundle -class CSVExtractorPlugin(Plugin): - data_sources = List( - IDataSourceBundle, - contributes_to='force.bdss.data_sources.bundles' - ) - - def _data_sources_default(self): +class CSVExtractorPlugin(BaseExtensionPlugin): + def _data_source_bundles_default(self): return [CSVExtractorBundle()] diff --git a/force_bdss/core_plugins/test_kpi/test_kpi_calculator_plugin.py b/force_bdss/core_plugins/test_kpi/test_kpi_calculator_plugin.py index 5250693b5e1ca20905d1185089fdaa8dbe524537..136fa47d9ec5ecdc44aa22d612e835fe98413df8 100644 --- a/force_bdss/core_plugins/test_kpi/test_kpi_calculator_plugin.py +++ b/force_bdss/core_plugins/test_kpi/test_kpi_calculator_plugin.py @@ -1,17 +1,8 @@ -from envisage.plugin import Plugin -from traits.api import List - -from force_bdss.kpi.i_kpi_calculator_bundle import ( - IKPICalculatorBundle) +from force_bdss.base_extension_plugin import BaseExtensionPlugin from .kpi_adder.kpi_adder_bundle import KPIAdderBundle -class TestKPICalculatorPlugin(Plugin): - kpi_calculators = List( - IKPICalculatorBundle, - contributes_to='force.bdss.kpi_calculators.bundles' - ) - - def _kpi_calculators_default(self): +class TestKPICalculatorPlugin(BaseExtensionPlugin): + def _kpi_calculator_bundles_default(self): return [KPIAdderBundle()] diff --git a/force_bdss/core_plugins/test_mco/multi_criteria_optimizers_plugin.py b/force_bdss/core_plugins/test_mco/multi_criteria_optimizers_plugin.py index 7805023cf713beae114728718e82f23b96c96552..f05ba192b0def248dcf243552453f23918be752d 100644 --- a/force_bdss/core_plugins/test_mco/multi_criteria_optimizers_plugin.py +++ b/force_bdss/core_plugins/test_mco/multi_criteria_optimizers_plugin.py @@ -1,17 +1,8 @@ -from envisage.plugin import Plugin -from traits.api import List - -from force_bdss.mco.i_multi_criteria_optimizer_bundle import ( - IMultiCriteriaOptimizerBundle) +from force_bdss.base_extension_plugin import BaseExtensionPlugin from .dakota.dakota_bundle import DakotaBundle -class MultiCriteriaOptimizersPlugin(Plugin): - multi_criteria_optimizers = List( - IMultiCriteriaOptimizerBundle, - contributes_to='force.bdss.mco.bundles' - ) - - def _multi_criteria_optimizers_default(self): +class MultiCriteriaOptimizersPlugin(BaseExtensionPlugin): + def _mco_bundles_default(self): return [DakotaBundle()] diff --git a/force_bdss/tests/test_bundle_registry_plugin.py b/force_bdss/tests/test_bundle_registry_plugin.py index f0869f0dc518d1dd26d6e9fd7d4947b8d0209be3..d689389f70cf454e959c7a665b837dc59b0673b8 100644 --- a/force_bdss/tests/test_bundle_registry_plugin.py +++ b/force_bdss/tests/test_bundle_registry_plugin.py @@ -1,5 +1,7 @@ import unittest +from force_bdss.base_extension_plugin import ( + BaseExtensionPlugin) from force_bdss.id_generators import bundle_id try: @@ -7,9 +9,7 @@ try: except ImportError: from unittest import mock -from traits.api import List from envisage.application import Application -from envisage.plugin import Plugin from force_bdss.bundle_registry_plugin import BundleRegistryPlugin from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle @@ -31,25 +31,7 @@ class TestBundleRegistry(unittest.TestCase): self.assertEqual(self.plugin.kpi_calculator_bundles, []) -class BaseBDSSPlugin(Plugin): - mco_bundles = List( - IMultiCriteriaOptimizerBundle, - contributes_to='force.bdss.mco.bundles' - ) - - #: A list of the available Data Sources. - #: It will be populated by plugins. - data_source_bundles = List( - IDataSourceBundle, - contributes_to='force.bdss.data_sources.bundles') - - kpi_calculator_bundles = List( - IKPICalculatorBundle, - contributes_to='force.bdss.kpi_calculators.bundles' - ) - - -class MySuperPlugin(BaseBDSSPlugin): +class MySuperPlugin(BaseExtensionPlugin): def _mco_bundles_default(self): return [mock.Mock(spec=IMultiCriteriaOptimizerBundle, id=bundle_id("enthought", "mco1"))]