Skip to content
Snippets Groups Projects
Commit 67c3fc26 authored by Stefano Borini's avatar Stefano Borini
Browse files

New API for parameters

parent 7ebcd1f9
No related branches found
No related tags found
1 merge request!130Safer plugin import - 2
...@@ -13,20 +13,22 @@ class BaseMCOParameterFactory(HasStrictTraits): ...@@ -13,20 +13,22 @@ class BaseMCOParameterFactory(HasStrictTraits):
""" """
#: A reference to the MCO factory this parameter factory lives in. #: A reference to the MCO factory this parameter factory lives in.
mco_factory = Instance('force_bdss.mco.base_mco_factory.BaseMCOFactory') mco_factory = Instance('force_bdss.mco.base_mco_factory.BaseMCOFactory',
allow_none=False)
#: A unique string identifying the parameter #: A unique string identifying the parameter
id = Str() id = Str()
#: A user friendly name (for the UI) #: A user friendly name (for the UI)
name = Str("Undefined parameter") name = Str()
#: A long description of the parameter #: A long description of the parameter
description = Str("Undefined parameter") description = Str()
# The model class to instantiate when create_model is called. # The model class to instantiate when create_model is called.
model_class = Type( model_class = Type(
"force_bdss.mco.parameters.base_mco_parameter.BaseMCOParameter" "force_bdss.mco.parameters.base_mco_parameter.BaseMCOParameter",
allow_none=False
) )
def get_identifier(self): def get_identifier(self):
...@@ -57,7 +59,17 @@ class BaseMCOParameterFactory(HasStrictTraits): ...@@ -57,7 +59,17 @@ class BaseMCOParameterFactory(HasStrictTraits):
self.description = self.get_description() self.description = self.get_description()
self.model_class = self.get_model_class() self.model_class = self.get_model_class()
identifier = self.get_identifier() identifier = self.get_identifier()
self.id = mco_parameter_id(self.mco_factory.id, identifier) try:
id = mco_parameter_id(self.mco_factory.id, identifier)
except ValueError:
raise ValueError(
"Invalid identifier {} returned by "
"{}.get_identifier()".format(
identifier,
self.__class__.__name__
)
)
self.id = id
def create_model(self, data_values=None): def create_model(self, data_values=None):
"""Creates the instance of the model class and returns it. """Creates the instance of the model class and returns it.
......
import unittest import unittest
from envisage.plugin import Plugin from envisage.plugin import Plugin
from traits.trait_errors import TraitError
from force_bdss.mco.base_mco_factory import BaseMCOFactory from force_bdss.mco.base_mco_factory import BaseMCOFactory
...@@ -21,20 +22,40 @@ class DummyMCOParameter(BaseMCOParameter): ...@@ -21,20 +22,40 @@ class DummyMCOParameter(BaseMCOParameter):
class DummyMCOParameterFactory(BaseMCOParameterFactory): class DummyMCOParameterFactory(BaseMCOParameterFactory):
id = "foo" def get_identifier(self):
name = "bar" return "foo"
description = "baz"
model_class = DummyMCOParameter
def get_name(self):
return "bar"
class DummyMCOFactory(BaseMCOFactory): def get_description(self):
pass return "description"
def get_model_class(self):
return DummyMCOParameter
class TestBaseMCOParameterFactory(unittest.TestCase): class TestBaseMCOParameterFactory(unittest.TestCase):
def setUp(self):
self.mco_factory = mock.Mock(
spec=BaseMCOFactory,
plugin=mock.Mock(
spec=Plugin,
id="pid"
),
id="mcoid"
)
def test_initialization(self): def test_initialization(self):
factory = DummyMCOParameterFactory( factory = DummyMCOParameterFactory(mco_factory=self.mco_factory)
mco_factory=BaseMCOFactory(plugin=mock.Mock(spec=Plugin))) self.assertEqual(factory.id, "mcoid.parameter.foo")
self.assertEqual(factory.name, "bar")
self.assertEqual(factory.description, "description")
self.assertEqual(factory.model_class, DummyMCOParameter)
self.assertIsInstance(factory.create_model(), DummyMCOParameter)
def test_create_model(self):
factory = DummyMCOParameterFactory(mco_factory=self.mco_factory)
model = factory.create_model({"x": 42}) model = factory.create_model({"x": 42})
self.assertIsInstance(model, DummyMCOParameter) self.assertIsInstance(model, DummyMCOParameter)
self.assertEqual(model.x, 42) self.assertEqual(model.x, 42)
...@@ -42,3 +63,35 @@ class TestBaseMCOParameterFactory(unittest.TestCase): ...@@ -42,3 +63,35 @@ class TestBaseMCOParameterFactory(unittest.TestCase):
model = factory.create_model() model = factory.create_model()
self.assertIsInstance(model, DummyMCOParameter) self.assertIsInstance(model, DummyMCOParameter)
self.assertEqual(model.x, 0) self.assertEqual(model.x, 0)
def test_broken_get_identifier(self):
class Broken(DummyMCOParameterFactory):
def get_identifier(self):
return None
with self.assertRaises(ValueError):
Broken(self.mco_factory)
def test_broken_get_name(self):
class Broken(DummyMCOParameterFactory):
def get_name(self):
return None
with self.assertRaises(TraitError):
Broken(self.mco_factory)
def test_broken_get_model_class(self):
class Broken(DummyMCOParameterFactory):
def get_model_class(self):
return None
with self.assertRaises(TraitError):
Broken(self.mco_factory)
def test_broken_get_description(self):
class Broken(DummyMCOParameterFactory):
def get_description(self):
return None
with self.assertRaises(TraitError):
Broken(self.mco_factory)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment