From cb1bf681dd2432cd8a405e48cbfce5b75d306673 Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Tue, 25 Jul 2017 14:11:11 +0100
Subject: [PATCH] docs and trivial test for parameter factory registry

---
 .../mco/parameters/base_mco_parameter_factory.py  | 15 +++++++++++++++
 .../mco/parameters/i_mco_parameter_factory.py     |  0
 .../mco/parameters/parameter_factory_registry.py  | 14 ++++++++++++--
 .../tests/test_parameter_factory_registry.py      | 10 ++++++++++
 4 files changed, 37 insertions(+), 2 deletions(-)
 create mode 100644 force_bdss/mco/parameters/base_mco_parameter_factory.py
 create mode 100644 force_bdss/mco/parameters/i_mco_parameter_factory.py
 create mode 100644 force_bdss/mco/parameters/tests/test_parameter_factory_registry.py

diff --git a/force_bdss/mco/parameters/base_mco_parameter_factory.py b/force_bdss/mco/parameters/base_mco_parameter_factory.py
new file mode 100644
index 0000000..57f16ec
--- /dev/null
+++ b/force_bdss/mco/parameters/base_mco_parameter_factory.py
@@ -0,0 +1,15 @@
+from traits.has_traits import HasStrictTraits
+from traits.trait_types import String, Type
+
+
+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)
diff --git a/force_bdss/mco/parameters/i_mco_parameter_factory.py b/force_bdss/mco/parameters/i_mco_parameter_factory.py
new file mode 100644
index 0000000..e69de29
diff --git a/force_bdss/mco/parameters/parameter_factory_registry.py b/force_bdss/mco/parameters/parameter_factory_registry.py
index 915cd0c..8bd180e 100644
--- a/force_bdss/mco/parameters/parameter_factory_registry.py
+++ b/force_bdss/mco/parameters/parameter_factory_registry.py
@@ -1,11 +1,21 @@
-from traits.api import HasStrictTraits, Dict
+from traits.api import HasStrictTraits, Dict, String
+
+from force_bdss.mco.parameters.base_mco_parameter_factory import \
+    BaseMCOParameterFactory
 
 
 class ParameterFactoryRegistry(HasStrictTraits):
-    factories = Dict()
+    """Registry to keep the parameter factories and lookup them.
+    """
+    # Temp: this will become an extension point.
+    factories = Dict(String, BaseMCOParameterFactory)
 
     def get_factory_by_id(self, id):
+        """Finds the factory by its id, so that we can obtain it as from
+        the id in the model file.
+        """
         return self.factories[id]
 
     def register(self, factory):
+        """Registers a new factory"""
         self.factories[factory.id] = factory
diff --git a/force_bdss/mco/parameters/tests/test_parameter_factory_registry.py b/force_bdss/mco/parameters/tests/test_parameter_factory_registry.py
new file mode 100644
index 0000000..39aca6b
--- /dev/null
+++ b/force_bdss/mco/parameters/tests/test_parameter_factory_registry.py
@@ -0,0 +1,10 @@
+import unittest
+
+from force_bdss.mco.parameters.parameter_factory_registry import \
+    ParameterFactoryRegistry
+
+
+class TestParameterFactoryRegistry(unittest.TestCase):
+    def test_registry_init(self):
+        reg = ParameterFactoryRegistry()
+        self.assertEqual(reg.factories, {})
-- 
GitLab