From 5d93ca8ec20f5c429dc9c73222106dca4cd5bcd1 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Tue, 25 Jul 2017 14:40:49 +0100 Subject: [PATCH] Documentation and testing for various parameter classes --- .../mco/parameters/base_mco_parameter.py | 20 +++++--------- .../parameters/base_mco_parameter_factory.py | 14 ++++++++++ .../mco/parameters/core_mco_parameters.py | 8 +++++- .../mco/parameters/i_mco_parameter_factory.py | 0 .../tests/test_base_mco_parameter_factory.py | 26 +++++++++++++++++++ .../tests/test_core_mco_parameters.py | 2 +- 6 files changed, 55 insertions(+), 15 deletions(-) delete mode 100644 force_bdss/mco/parameters/i_mco_parameter_factory.py create mode 100644 force_bdss/mco/parameters/tests/test_base_mco_parameter_factory.py diff --git a/force_bdss/mco/parameters/base_mco_parameter.py b/force_bdss/mco/parameters/base_mco_parameter.py index cad3437..95f257c 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 57f16ec..6124173 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 a1b6d50..072d0a2 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 e69de29..0000000 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 0000000..3203aa7 --- /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 80fd17b..feec858 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 -- GitLab