Merge "objects: avoid validation in stringify for custom field types"

This commit is contained in:
Jenkins 2016-04-08 11:14:47 +00:00 committed by Gerrit Code Review
commit f6a933d640
2 changed files with 3 additions and 28 deletions

View File

@ -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()

View File

@ -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):