Merge "Check object's field"
This commit is contained in:
@@ -1381,6 +1381,10 @@ class ObjectActionError(NovaException):
|
||||
msg_fmt = _('Object action %(action)s failed because: %(reason)s')
|
||||
|
||||
|
||||
class ObjectFieldInvalid(NovaException):
|
||||
msg_fmt = _('Field %(field)s of %(objname)s is not an instance of Field')
|
||||
|
||||
|
||||
class CoreAPIMissing(NovaException):
|
||||
msg_fmt = _("Core API extensions are missing: %(missing_apis)s")
|
||||
|
||||
|
||||
@@ -56,6 +56,9 @@ def make_class_properties(cls):
|
||||
if name not in cls.fields:
|
||||
cls.fields[name] = field
|
||||
for name, field in cls.fields.iteritems():
|
||||
if not isinstance(field, fields.Field):
|
||||
raise exception.ObjectFieldInvalid(
|
||||
field=name, objname=cls.obj_name())
|
||||
|
||||
def getter(self, name=name):
|
||||
attrname = get_attrname(name)
|
||||
|
||||
@@ -138,6 +138,19 @@ class TestMetaclass(test.TestCase):
|
||||
self.assertEqual(expected, Test1._obj_classes)
|
||||
self.assertEqual(expected, Test2._obj_classes)
|
||||
|
||||
def test_field_checking(self):
|
||||
def create_class(field):
|
||||
class TestField(base.NovaObject):
|
||||
VERSION = '1.5'
|
||||
fields = {'foo': field()}
|
||||
return TestField
|
||||
|
||||
cls = create_class(fields.IPV4AndV6AddressField)
|
||||
self.assertRaises(exception.ObjectFieldInvalid,
|
||||
create_class, fields.IPV4AndV6Address)
|
||||
self.assertRaises(exception.ObjectFieldInvalid,
|
||||
create_class, int)
|
||||
|
||||
|
||||
class TestObjToPrimitive(test.TestCase):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user