From 0c7ec37d3aa5941b1d8d8bf4bfe78b6ff90d9211 Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Wed, 2 Mar 2016 11:54:04 +0100 Subject: [PATCH] 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 --- oslo_versionedobjects/fields.py | 13 +++++++++++-- oslo_versionedobjects/tests/test_fields.py | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/oslo_versionedobjects/fields.py b/oslo_versionedobjects/fields.py index df918b1..9bae010 100644 --- a/oslo_versionedobjects/fields.py +++ b/oslo_versionedobjects/fields.py @@ -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, diff --git a/oslo_versionedobjects/tests/test_fields.py b/oslo_versionedobjects/tests/test_fields.py index ddc7876..e789764 100644 --- a/oslo_versionedobjects/tests/test_fields.py +++ b/oslo_versionedobjects/tests/test_fields.py @@ -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):