Merge "objects: avoid validation in stringify for custom field types"
This commit is contained in:
commit
f6a933d640
|
@ -39,22 +39,15 @@ class RangeConstrainedInteger(obj_fields.Integer):
|
|||
start=start, end=end)
|
||||
super(RangeConstrainedInteger, self).__init__(**kwargs)
|
||||
|
||||
def _validate_value(self, value):
|
||||
def coerce(self, obj, attr, value):
|
||||
if not isinstance(value, six.integer_types):
|
||||
msg = _("Field value %s is not an integer") % value
|
||||
raise ValueError(msg)
|
||||
if not self._start <= value <= self._end:
|
||||
msg = _("Field value %s is invalid") % value
|
||||
raise ValueError(msg)
|
||||
|
||||
def coerce(self, obj, attr, value):
|
||||
self._validate_value(value)
|
||||
return super(RangeConstrainedInteger, self).coerce(obj, attr, value)
|
||||
|
||||
def stringify(self, value):
|
||||
self._validate_value(value)
|
||||
return super(RangeConstrainedInteger, self).stringify(value)
|
||||
|
||||
|
||||
class IPNetworkPrefixLen(RangeConstrainedInteger):
|
||||
"""IP network (CIDR) prefix length custom Enum"""
|
||||
|
@ -84,7 +77,7 @@ class IntegerEnum(obj_fields.Integer):
|
|||
self._valid_values = valid_values
|
||||
super(IntegerEnum, self).__init__(**kwargs)
|
||||
|
||||
def _validate_value(self, value):
|
||||
def coerce(self, obj, attr, value):
|
||||
if not isinstance(value, six.integer_types):
|
||||
msg = _("Field value %s is not an integer") % value
|
||||
raise ValueError(msg)
|
||||
|
@ -95,15 +88,8 @@ class IntegerEnum(obj_fields.Integer):
|
|||
{'value': value, 'values': self._valid_values}
|
||||
)
|
||||
raise ValueError(msg)
|
||||
|
||||
def coerce(self, obj, attr, value):
|
||||
self._validate_value(value)
|
||||
return super(IntegerEnum, self).coerce(obj, attr, value)
|
||||
|
||||
def stringify(self, value):
|
||||
self._validate_value(value)
|
||||
return super(IntegerEnum, self).stringify(value)
|
||||
|
||||
|
||||
class IPVersionEnum(IntegerEnum):
|
||||
"""IP version integer Enum"""
|
||||
|
@ -145,19 +131,12 @@ class MACAddress(obj_fields.FieldType):
|
|||
This custom field is different from the one provided by
|
||||
oslo.versionedobjects library: it uses netaddr.EUI type instead of strings.
|
||||
"""
|
||||
def _validate_value(self, value):
|
||||
def coerce(self, obj, attr, value):
|
||||
if not isinstance(value, netaddr.EUI):
|
||||
msg = _("Field value %s is not a netaddr.EUI") % value
|
||||
raise ValueError(msg)
|
||||
|
||||
def coerce(self, obj, attr, value):
|
||||
self._validate_value(value)
|
||||
return super(MACAddress, self).coerce(obj, attr, value)
|
||||
|
||||
def stringify(self, value):
|
||||
self._validate_value(value)
|
||||
return super(MACAddress, self).stringify(value)
|
||||
|
||||
|
||||
class MACAddressField(obj_fields.AutoTypedField):
|
||||
AUTO_TYPE = MACAddress()
|
||||
|
|
|
@ -47,10 +47,6 @@ class TestField(object):
|
|||
def test_stringify(self):
|
||||
'''This test should validate stringify() format for new field types.'''
|
||||
|
||||
def test_stringify_invalid(self):
|
||||
for in_val in self.coerce_bad_values:
|
||||
self.assertRaises(ValueError, self.field.stringify, in_val)
|
||||
|
||||
|
||||
class IPV6ModeEnumFieldTest(test_base.BaseTestCase, TestField):
|
||||
def setUp(self):
|
||||
|
|
Loading…
Reference in New Issue