Add desc-support to traits

This commit is contained in:
Griatch 2020-04-19 18:12:16 +02:00
parent cf1671b49c
commit 439d2f919c
2 changed files with 62 additions and 22 deletions

View file

@ -403,8 +403,8 @@ class TestTraitCounter(_TraitHandlerBase):
descs={
0: "range0",
2: "range1",
5: "range3",
7: "range4",
5: "range2",
7: "range3",
}
)
self.trait = self.traithandler.get("test1")
@ -424,14 +424,14 @@ class TestTraitCounter(_TraitHandlerBase):
"min": 0,
"max": 10,
"extra_val1": "xvalue1",
"extra_val2": "xvalue2"
},
"descs": {
"extra_val2": "xvalue2",
"descs": {
0: "range0",
2: "range1",
5: "range3",
7: "range4",
}
5: "range2",
7: "range3",
}
}
)
def test_actual(self):
@ -549,19 +549,23 @@ class TestTraitCounter(_TraitHandlerBase):
def test_descs(self):
"""Test descriptions"""
self.trait.min = -5
self.trait.mod = 0
self.current = 0
self.assertEqual(self._get_values(), (1, 0, 1, -5, 10))
self.trait.current = -2
self.assertEqual(self.trait.desc(), "range0")
self.current = 1
self.trait.current = 0
self.assertEqual(self.trait.desc(), "range0")
self.current = 3
self.trait.current = 1
self.assertEqual(self.trait.desc(), "range1")
self.current = 5
self.trait.current = 3
self.assertEqual(self.trait.desc(), "range2")
self.trait.current = 5
self.assertEqual(self.trait.desc(), "range2")
self.trait.current = 9
self.assertEqual(self.trait.desc(), "range3")
self.trait.current = 100
self.assertEqual(self.trait.desc(), "range3")
self.current = 9
self.assertEqual(self.trait.desc(), "range4")
self.current = 100
self.assertEqual(self.trait.desc(), "range4")
class TestTraitGauge(_TraitHandlerBase):
@ -575,7 +579,13 @@ class TestTraitGauge(_TraitHandlerBase):
base=8, # max = base + mod
mod=2,
extra_val1="xvalue1",
extra_val2="xvalue2"
extra_val2="xvalue2",
descs={
0: "range0",
2: "range1",
5: "range2",
7: "range3",
}
)
self.trait = self.traithandler.get("test1")
@ -594,7 +604,12 @@ class TestTraitGauge(_TraitHandlerBase):
"min": 0,
"extra_val1": "xvalue1",
"extra_val2": "xvalue2",
"descs": None
"descs": {
0: "range0",
2: "range1",
5: "range2",
7: "range3",
}
}
)
def test_actual(self):
@ -717,6 +732,25 @@ class TestTraitGauge(_TraitHandlerBase):
self.trait.mod -= 1
self.assertEqual(self.trait.percent(), "33.3%")
def test_descs(self):
"""Test descriptions"""
self.trait.min = -5
self.assertEqual(self._get_values(), (8, 2, 10, -5, 10))
self.trait.current = -2
self.assertEqual(self.trait.desc(), "range0")
self.trait.current = 0
self.assertEqual(self.trait.desc(), "range0")
self.trait.current = 1
self.assertEqual(self.trait.desc(), "range1")
self.trait.current = 3
self.assertEqual(self.trait.desc(), "range2")
self.trait.current = 5
self.assertEqual(self.trait.desc(), "range2")
self.trait.current = 9
self.assertEqual(self.trait.desc(), "range3")
self.trait.current = 100
self.assertEqual(self.trait.desc(), "range3")
class TestNumericTraitOperators(TestCase):
"""Test case for numeric magic method implementations."""

View file

@ -957,7 +957,7 @@ class CounterTrait(NumericTrait):
"mod": 0,
"min": None,
"max": None,
"descs": None:
"descs": None,
}
@classmethod
@ -1087,7 +1087,8 @@ class CounterTrait(NumericTrait):
Retrieve descriptions of the current value, if available.
This must be a mapping {upper_bound_inclusive: text},
ordered from small to big.
ordered from small to big. Any value above the highest
upper bound will be included as being in the highest bound.
rely on Python3.7+ dicts retaining ordering to let this
describe the interval.
@ -1100,9 +1101,14 @@ class CounterTrait(NumericTrait):
return ""
value = self.actual
# we rely on Python3.7+ dicts retaining ordering
highest = ""
for bound, txt in descs.items():
if bound >= value:
highest = txt
if value <= bound:
return txt
# if we get here we are above the highest bound so
# we return the latest bound specified.
return highest
class GaugeTrait(CounterTrait):
@ -1249,7 +1255,7 @@ class GaugeTrait(CounterTrait):
del self.current
class SequenceTrait(CounterTrait)
class SequenceTrait(CounterTrait):
"""
A trait that stores an indexed array of strings to
represent distinct values in a sequence. Adding to the trait will