diff --git a/openstack/resource.py b/openstack/resource.py index 4379b2ea..cf249d3c 100644 --- a/openstack/resource.py +++ b/openstack/resource.py @@ -104,6 +104,9 @@ class prop(object): return None try: value = instance[self.name] + # self.type() should not be called on None objects. + if value is None: + return None except KeyError: try: value = instance[self.alias] diff --git a/openstack/tests/unit/test_resource.py b/openstack/tests/unit/test_resource.py index f7f44c9d..f828e72b 100644 --- a/openstack/tests/unit/test_resource.py +++ b/openstack/tests/unit/test_resource.py @@ -195,6 +195,16 @@ class PropTests(base.TestCase): self.assertEqual(val, sot._attrs["something"]) self.assertEqual(val, sot.attr) + def test_property_is_none(self): + class Test(resource.Resource): + attr = resource.prop("something", type=dict) + + args = {"something": None} + sot = Test(args) + + self.assertIsNone(sot._attrs["something"]) + self.assertIsNone(sot.attr) + class HeaderTests(base.TestCase): class Test(resource.Resource):