bt2: field.py: _value_to_int(): require `numbers.Integral`
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 28 Jun 2019 05:08:25 +0000 (01:08 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Wed, 3 Jul 2019 01:31:27 +0000 (21:31 -0400)
Be more strict in the _value_to_int() functions: require that the
parameter's type is an instance of `numbers.Integral` instead of
`numbers.Real` to make the following raise a type error:

    my_int_field.value = 17.5

I believe it's better to be strict here than to arbitrarily choose to
use the parameter's value's floor.

RealValue._value_to_float() already requires a real value, so this is
just analogous.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I3b981e90f7e2c133fa4d56e79333c4fe600eca8b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1569
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
src/bindings/python/bt2/bt2/field.py
tests/bindings/python/bt2/test_field.py

index 7d68d0e08ae58a2d3d69abb1eba438a4bda6b9a0..9882f0236549a143841d299c98e72b5600bedd9b 100644 (file)
@@ -211,8 +211,8 @@ class _UnsignedIntegerField(_IntegerField, _Field):
     _NAME = 'Unsigned integer'
 
     def _value_to_int(self, value):
-        if not isinstance(value, numbers.Real):
-            raise TypeError('expecting a real number object')
+        if not isinstance(value, numbers.Integral):
+            raise TypeError('expecting an integral number object')
 
         value = int(value)
         utils._check_uint64(value)
@@ -234,8 +234,8 @@ class _SignedIntegerField(_IntegerField, _Field):
     _NAME = 'Signed integer'
 
     def _value_to_int(self, value):
-        if not isinstance(value, numbers.Real):
-            raise TypeError('expecting a real number object')
+        if not isinstance(value, numbers.Integral):
+            raise TypeError('expecting an integral number object')
 
         value = int(value)
         utils._check_int64(value)
index 356e053246b94f20d24c0797650096dd78c1a01a..a22d3f4a89064549dc068562d701a3f1db3edac9 100644 (file)
@@ -636,11 +636,6 @@ class _TestIntegerFieldCommon(_TestNumericField):
         self._def.value = field
         self.assertEqual(self._def, raw)
 
-    def test_assign_float(self):
-        raw = 123.456
-        self._def.value = raw
-        self.assertEqual(self._def, int(raw))
-
     def test_assign_invalid_type(self):
         with self.assertRaises(TypeError):
             self._def.value = 'yes'
This page took 0.026081 seconds and 4 git commands to generate.