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