diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-06-27 07:22:44 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-06-27 07:22:44 +0000 |
commit | 5659a60ce64b8fc3feea525945262f1249bf3130 (patch) | |
tree | 907c3dd7d7f123d1e3b08318f0422661dbe937c5 /nova | |
parent | 6aff2c92b366bf4b0c3c6ef72fec5cdde3b7381c (diff) | |
parent | 68cb4d53385821c3ffdc40c299a77d11a7f98f27 (diff) | |
download | nova-5659a60ce64b8fc3feea525945262f1249bf3130.tar.gz nova-5659a60ce64b8fc3feea525945262f1249bf3130.tar.xz nova-5659a60ce64b8fc3feea525945262f1249bf3130.zip |
Merge "Add obj_to_primitive() to recursively primitiveize objects"
Diffstat (limited to 'nova')
-rw-r--r-- | nova/objects/base.py | 17 | ||||
-rw-r--r-- | nova/tests/objects/test_objects.py | 25 |
2 files changed, 42 insertions, 0 deletions
diff --git a/nova/objects/base.py b/nova/objects/base.py index 147d55c23..4f973de0c 100644 --- a/nova/objects/base.py +++ b/nova/objects/base.py @@ -464,3 +464,20 @@ class NovaObjectSerializer(nova.openstack.common.rpc.serializer.Serializer): entity = self._process_iterable(context, self.deserialize_entity, entity) return entity + + +def obj_to_primitive(obj): + """Recrusively turn an object into a python primitive. + + A NovaObject becomes a dict, and anything that implements ObjectListBase + becomes a list. + """ + if isinstance(obj, ObjectListBase): + return [obj_to_primitive(x) for x in obj] + elif isinstance(obj, NovaObject): + result = {} + for key, value in obj.iteritems(): + result[key] = obj_to_primitive(value) + return result + else: + return obj diff --git a/nova/tests/objects/test_objects.py b/nova/tests/objects/test_objects.py index 40ad8bb81..03a270386 100644 --- a/nova/tests/objects/test_objects.py +++ b/nova/tests/objects/test_objects.py @@ -178,6 +178,31 @@ class TestUtils(test.TestCase): self.assertEqual(utils.dt_deserializer(None, None), None) self.assertRaises(ValueError, utils.dt_deserializer, None, 'foo') + def test_obj_to_primitive_list(self): + class MyList(base.ObjectListBase, base.NovaObject): + pass + mylist = MyList() + mylist.objects = [1, 2, 3] + self.assertEqual([1, 2, 3], base.obj_to_primitive(mylist)) + + def test_obj_to_primitive_dict(self): + myobj = MyObj() + myobj.foo = 1 + myobj.bar = 'foo' + self.assertEqual({'foo': 1, 'bar': 'foo'}, + base.obj_to_primitive(myobj)) + + def test_obj_to_primitive_recursive(self): + class MyList(base.ObjectListBase, base.NovaObject): + pass + + mylist = MyList() + mylist.objects = [MyObj(), MyObj()] + for i, value in enumerate(mylist): + value.foo = i + self.assertEqual([{'foo': 0}, {'foo': 1}], + base.obj_to_primitive(mylist)) + class _BaseTestCase(test.TestCase): def setUp(self): |