Add BaseEnumField valid_values introspection

The new class property allows introspection of the valid values,
used to ease testing by random field generation.

Change-Id: I749bc0acea4947450b4c02dca932a05a7a4ad534
This commit is contained in:
Miguel Angel Ajo 2016-03-02 11:54:04 +01:00
parent 15d96379aa
commit 0c7ec37d3a
2 changed files with 15 additions and 2 deletions

View File

@ -291,6 +291,10 @@ class Enum(String):
self._valid_values = valid_values
super(Enum, self).__init__(**kwargs)
@property
def valid_values(self):
return tuple(self._valid_values)
def coerce(self, obj, attr, value):
if value not in self._valid_values:
msg = _("Field value %s is invalid") % value
@ -683,7 +687,7 @@ class BaseEnumField(AutoTypedField):
super(BaseEnumField, self).__init__(**kwargs)
def __repr__(self):
valid_values = self._type._valid_values
valid_values = self._type.valid_values
args = {
'nullable': self._nullable,
'default': self._default,
@ -693,6 +697,11 @@ class BaseEnumField(AutoTypedField):
','.join(['%s=%s' % (k, v)
for k, v in sorted(args.items())]))
@property
def valid_values(self):
"""Return the list of valid values for the field."""
return self._type.valid_values
class EnumField(BaseEnumField):
'''Anonymous enum field type
@ -878,7 +887,7 @@ class ListOfEnumField(AutoTypedField):
super(ListOfEnumField, self).__init__(**kwargs)
def __repr__(self):
valid_values = self._type._element_type._type._valid_values
valid_values = self._type._element_type._type.valid_values
args = {
'nullable': self._nullable,
'default': self._default,

View File

@ -252,6 +252,10 @@ class TestBaseEnum(TestField):
field2 = FakeEnumAltField()
self.assertNotEqual(str(field1), str(field2))
def test_valid_values(self):
self.assertEqual(self.field.valid_values,
FakeEnum.ALL)
class TestEnum(TestField):
def setUp(self):