From a05d9e5d1881d3180e176ab5b1df96469c3c80fd Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Mon, 2 Jul 2018 09:11:13 +0100 Subject: [PATCH] Adds positive int trait --- force_bdss/api.py | 2 +- force_bdss/local_traits.py | 18 +++++++++++++++++- force_bdss/tests/test_local_traits.py | 13 ++++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/force_bdss/api.py b/force_bdss/api.py index a4d3c0d..aa79824 100644 --- a/force_bdss/api.py +++ b/force_bdss/api.py @@ -43,4 +43,4 @@ from .ui_hooks.i_ui_hooks_factory import IUIHooksFactory # noqa from .ui_hooks.base_ui_hooks_factory import BaseUIHooksFactory # noqa from .ui_hooks.base_ui_hooks_manager import BaseUIHooksManager # noqa -from .local_traits import Identifier # noqa +from .local_traits import Identifier, PositiveInt # noqa diff --git a/force_bdss/local_traits.py b/force_bdss/local_traits.py index f759aed..12c9825 100644 --- a/force_bdss/local_traits.py +++ b/force_bdss/local_traits.py @@ -1,4 +1,4 @@ -from traits.api import Regex, String +from traits.api import Regex, String, BaseInt #: Used for variable names, but allow also empty string as it's the default #: case and it will be present if the workflow is saved before actually @@ -8,3 +8,19 @@ Identifier = Regex(regex="(^[^\d\W]\w*\Z|^\Z)") #: Identifies a CUBA type with its key. At the moment a String with #: no validation, but will come later. CUBAType = String() + + +class PositiveInt(BaseInt): + """A positive integer trait.""" + + info_text = 'a positive integer' + + default_value = 1 + + def validate(self, object, name, value): + int_value = super(PositiveInt, self).validate(object, name, value) + + if int_value > 0: + return int_value + + self.error(object, name, value) diff --git a/force_bdss/tests/test_local_traits.py b/force_bdss/tests/test_local_traits.py index d61e6d2..7d0c59c 100644 --- a/force_bdss/tests/test_local_traits.py +++ b/force_bdss/tests/test_local_traits.py @@ -1,12 +1,13 @@ import unittest from traits.api import HasStrictTraits, TraitError -from force_bdss.local_traits import Identifier, CUBAType +from force_bdss.local_traits import Identifier, CUBAType, PositiveInt class Traited(HasStrictTraits): val = Identifier() cuba = CUBAType() + positive_int = PositiveInt() class TestLocalTraits(unittest.TestCase): @@ -25,3 +26,13 @@ class TestLocalTraits(unittest.TestCase): c = Traited() c.cuba = "PRESSURE" self.assertEqual(c.cuba, "PRESSURE") + + def test_positive_int(self): + c = Traited() + with self.assertRaises(TraitError): + c.positive_int = 0 + + with self.assertRaises(TraitError): + c.positive_int = -1 + + c.positive_int = 3 -- GitLab