diff --git a/force_bdss/mco/parameters/base_mco_parameter.py b/force_bdss/mco/parameters/base_mco_parameter.py index cad3437312aad9434b0c3c01195dacabeeb621be..95f257c017151e0ccc58c2766b06e167daf20242 100644 --- a/force_bdss/mco/parameters/base_mco_parameter.py +++ b/force_bdss/mco/parameters/base_mco_parameter.py @@ -1,20 +1,14 @@ -from traits.api import HasStrictTraits, String, Type, Instance +from traits.api import HasStrictTraits, String, Instance - -class BaseMCOParameterFactory(HasStrictTraits): - id = String() - name = String("Undefined parameter") - description = String("Undefined parameter") - model_class = Type('BaseMCOParameter') - - def create_model(self, data_values=None): - if data_values is None: - data_values = {} - - return self.model_class(factory=self, **data_values) +from force_bdss.mco.parameters.base_mco_parameter_factory import \ + BaseMCOParameterFactory class BaseMCOParameter(HasStrictTraits): + """The base class of all MCO Parameter models. + Must be reimplemented by specific classes handling the specific parameter + that MCOs understand. + """ factory = Instance(BaseMCOParameterFactory) value_name = String() value_type = String() diff --git a/force_bdss/mco/parameters/base_mco_parameter_factory.py b/force_bdss/mco/parameters/base_mco_parameter_factory.py index 57f16ecd5bbd3333f93fb2718e60b52ee16a1419..61241739e6564816e3eab15ddbe6e5726463267b 100644 --- a/force_bdss/mco/parameters/base_mco_parameter_factory.py +++ b/force_bdss/mco/parameters/base_mco_parameter_factory.py @@ -3,12 +3,26 @@ from traits.trait_types import String, Type class BaseMCOParameterFactory(HasStrictTraits): + """Factory that produces the model instance of a given BASEMCOParameter + instance. + + Must be reimplemented for the specific parameter.""" + + #: A unique string identifying the parameter id = String() + + #: A user friendly name (for the UI) name = String("Undefined parameter") + + #: A long description of the parameter description = String("Undefined parameter") + + # The model class to instantiate when create_model is called. model_class = Type('BaseMCOParameter') def create_model(self, data_values=None): + """Creates the instance of the model class and returns it. + """ if data_values is None: data_values = {} diff --git a/force_bdss/mco/parameters/core_mco_parameters.py b/force_bdss/mco/parameters/core_mco_parameters.py index a1b6d508b93649f96da0d129e8f0b4d0f1707376..072d0a2a072086bce78232a88aee192e6f0025ad 100644 --- a/force_bdss/mco/parameters/core_mco_parameters.py +++ b/force_bdss/mco/parameters/core_mco_parameters.py @@ -1,16 +1,21 @@ from traits.api import Float from ...ids import mco_parameter_id -from .base_mco_parameter import BaseMCOParameter, BaseMCOParameterFactory +from .base_mco_parameter import BaseMCOParameter +from force_bdss.mco.parameters.base_mco_parameter_factory import \ + BaseMCOParameterFactory class RangedMCOParameter(BaseMCOParameter): + """Expresses a MCO parameter that has a range between two floating + point values.""" initial_value = Float() upper_bound = Float() lower_bound = Float() class RangedMCOParameterFactory(BaseMCOParameterFactory): + """The factory of the above model""" id = mco_parameter_id("enthought", "ranged") model_class = RangedMCOParameter name = "Range" @@ -18,6 +23,7 @@ class RangedMCOParameterFactory(BaseMCOParameterFactory): def all_core_factories(): + """Produces a list of all factories contained in this module.""" import inspect return [c for c in inspect.getmodule(all_core_factories).__dict__.values() diff --git a/force_bdss/mco/parameters/i_mco_parameter_factory.py b/force_bdss/mco/parameters/i_mco_parameter_factory.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py b/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py new file mode 100644 index 0000000000000000000000000000000000000000..3203aa718a8321e29b8d8a053d96f726886a1547 --- /dev/null +++ b/force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py @@ -0,0 +1,26 @@ +import unittest +from traits.api import Int + + +from force_bdss.mco.parameters.base_mco_parameter import BaseMCOParameter +from force_bdss.mco.parameters.base_mco_parameter_factory import \ + BaseMCOParameterFactory + + +class DummyMCOParameter(BaseMCOParameter): + x = Int() + + +class DummyMCOParameterFactory(BaseMCOParameterFactory): + id = "foo" + name = "bar" + description = "baz" + model_class = DummyMCOParameter + + +class TestBaseMCOParameterFactory(unittest.TestCase): + def test_initialization(self): + factory = DummyMCOParameterFactory() + model = factory.create_model({"x": 42}) + self.assertIsInstance(model, DummyMCOParameter) + self.assertEqual(model.x, 42) diff --git a/force_bdss/mco/parameters/tests/test_core_mco_parameters.py b/force_bdss/mco/parameters/tests/test_core_mco_parameters.py index 80fd17be427e77d3b6a7474c07a70aa03c4edd71..feec858f0680403d83baffd28918542cc92ae67b 100644 --- a/force_bdss/mco/parameters/tests/test_core_mco_parameters.py +++ b/force_bdss/mco/parameters/tests/test_core_mco_parameters.py @@ -1,7 +1,7 @@ import unittest from force_bdss.mco.parameters import core_mco_parameters -from force_bdss.mco.parameters.base_mco_parameter import \ +from force_bdss.mco.parameters.base_mco_parameter_factory import \ BaseMCOParameterFactory