diff --git a/doc/source/api/force_bdss.tests.rst b/doc/source/api/force_bdss.tests.rst index 149a14bb7187eda808fdadcb8a5b8f59d5d73ed5..d1975c7c968cf1c9ef95987ee10c0df2ab01366c 100644 --- a/doc/source/api/force_bdss.tests.rst +++ b/doc/source/api/force_bdss.tests.rst @@ -27,10 +27,10 @@ force_bdss.tests.test_bundle_registry_plugin module :undoc-members: :show-inheritance: -force_bdss.tests.test_id_generators module ------------------------------------------- +force_bdss.tests.test_ids module +-------------------------------- -.. automodule:: force_bdss.tests.test_id_generators +.. automodule:: force_bdss.tests.test_ids :members: :undoc-members: :show-inheritance: diff --git a/force_bdss/api.py b/force_bdss/api.py index 418766a2a8d93d83a2e3ce724e1a4268803e6c2f..5c71f3d71284e4124ab530be23f6f5c17dcbb576 100644 --- a/force_bdss/api.py +++ b/force_bdss/api.py @@ -1,5 +1,5 @@ from .base_extension_plugin import BaseExtensionPlugin # noqa -from .ids import bundle_id # noqa +from .ids import bundle_id, plugin_id # noqa from .data_sources.base_data_source_model import BaseDataSourceModel # noqa from .data_sources.data_source_result import DataSourceResult # noqa diff --git a/force_bdss/core_evaluation_driver.py b/force_bdss/core_evaluation_driver.py index 61dac3e0e6bb28028fd973002dc6086d006c6ff6..d8a4fbba8d940a810f78f36904987ee718a03ba2 100644 --- a/force_bdss/core_evaluation_driver.py +++ b/force_bdss/core_evaluation_driver.py @@ -3,17 +3,21 @@ from __future__ import print_function import sys from traits.api import on_trait_change +from .ids import plugin_id from .base_core_driver import BaseCoreDriver from .io.workflow_reader import ( InvalidVersionException, InvalidFileException ) +CORE_EVALUATION_DRIVER_ID = plugin_id("core", "CoreEvaluationDriver") + class CoreEvaluationDriver(BaseCoreDriver): """Main plugin that handles the execution of the MCO or the evaluation. """ + id = CORE_EVALUATION_DRIVER_ID @on_trait_change("application:started") def application_started(self): diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py index 07973ccbf329a5da5d0cd318cfe4fa623978b6e9..bf22630639377c2c42a303bba9638425b221dd24 100644 --- a/force_bdss/core_mco_driver.py +++ b/force_bdss/core_mco_driver.py @@ -4,17 +4,21 @@ import sys from traits.api import on_trait_change +from .ids import plugin_id from .base_core_driver import BaseCoreDriver from .io.workflow_reader import ( InvalidVersionException, InvalidFileException ) +CORE_MCO_DRIVER_ID = plugin_id("core", "CoreMCODriver") + class CoreMCODriver(BaseCoreDriver): """Main plugin that handles the execution of the MCO or the evaluation. """ + id = CORE_MCO_DRIVER_ID @on_trait_change("application:started") def application_started(self): diff --git a/force_bdss/core_plugins/dummy/dummy_plugin.py b/force_bdss/core_plugins/dummy/dummy_plugin.py index 3eca5b37262bfaab0416ee01c82e5287e5455a2f..f77b4dc843ff58883933f2acc89cce795703439d 100644 --- a/force_bdss/core_plugins/dummy/dummy_plugin.py +++ b/force_bdss/core_plugins/dummy/dummy_plugin.py @@ -1,4 +1,4 @@ -from force_bdss.api import BaseExtensionPlugin +from force_bdss.api import BaseExtensionPlugin, plugin_id from .csv_extractor.csv_extractor_bundle import CSVExtractorBundle from .kpi_adder.kpi_adder_bundle import KPIAdderBundle from .dummy_dakota.dakota_bundle import DummyDakotaBundle @@ -9,6 +9,8 @@ from .dummy_kpi_calculator.dummy_kpi_calculator_bundle import ( class DummyPlugin(BaseExtensionPlugin): + id = plugin_id("enthought", "DummyPlugin") + def _data_source_bundles_default(self): return [DummyDataSourceBundle(), CSVExtractorBundle()] diff --git a/force_bdss/ids.py b/force_bdss/ids.py index 81ff1062170f547fc95cd90a79516781ad3848c6..2af5c0b5541a3132eb9010067cc9194e4b5fd165 100644 --- a/force_bdss/ids.py +++ b/force_bdss/ids.py @@ -33,9 +33,18 @@ def bundle_id(producer, identifier): def mco_parameter_id(producer, identifier): + """Creates an ID for an MCO parameter, so that it can be identified + uniquely.""" return _string_id("mco_parameter", producer, identifier) +def plugin_id(producer, identifier): + """Creates an ID for the plugins. These must be defined, otherwise + the envisage system will complain (but not break) + """ + return _string_id("plugin", producer, identifier) + + def _string_id(entity_namespace, producer, identifier): """Creates an id for a generic entity. diff --git a/force_bdss/tests/test_id_generators.py b/force_bdss/tests/test_ids.py similarity index 52% rename from force_bdss/tests/test_id_generators.py rename to force_bdss/tests/test_ids.py index 3faefeb2b208e1808f66c80d3407792f7c042639..1ebff9a8adfa40748165c75b4f467e6c4f2adb98 100644 --- a/force_bdss/tests/test_id_generators.py +++ b/force_bdss/tests/test_ids.py @@ -1,6 +1,6 @@ import unittest -from force_bdss.ids import bundle_id +from force_bdss.ids import bundle_id, plugin_id class TestIdGenerators(unittest.TestCase): @@ -13,3 +13,12 @@ class TestIdGenerators(unittest.TestCase): bundle_id(bad_entry, "bar") with self.assertRaises(ValueError): bundle_id("foo", bad_entry) + + def test_plugin_id(self): + self.assertEqual(plugin_id("foo", "bar"), "force.bdss.plugin.foo.bar") + + for bad_entry in ["", None, " ", "foo bar"]: + with self.assertRaises(ValueError): + plugin_id(bad_entry, "bar") + with self.assertRaises(ValueError): + plugin_id("foo", bad_entry)