From 2d6f84742a3e8ea51ebbfb82cbeacefe97e199d5 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Wed, 18 Jul 2012 16:15:52 -0400 Subject: Track to_primitive() depth after iteritems(). Change jsonutils.to_primitive() to increase the recursion depth counter when calling to_primitive() on the result of iteritems() from the current element. Previously, the only time the counter was increased was when converting the __dict__ from an object. The iteritems() case risks cycles, as well. I hit a problem with this when trying to call to_primitive on an instance of nova.db.sqlalchemy.models.Instance. An Instance includes a reference to InstanceInfoCache, which has a reference back to the Instance. Without this change, to_primitive() would raise an exception for an Instance due to excessive recursion. Related to nova blueprint no-db-messaging. Change-Id: Ifb878368d97e92ab6c361a4dd5f5ab2e68fc16e2 --- openstack/common/jsonutils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'openstack') diff --git a/openstack/common/jsonutils.py b/openstack/common/jsonutils.py index 6130a7f..e8e14c4 100644 --- a/openstack/common/jsonutils.py +++ b/openstack/common/jsonutils.py @@ -107,7 +107,7 @@ def to_primitive(value, convert_instances=False, level=0): elif hasattr(value, 'iteritems'): return to_primitive(dict(value.iteritems()), convert_instances=convert_instances, - level=level) + level=level + 1) elif hasattr(value, '__iter__'): return to_primitive(list(value), level) elif convert_instances and hasattr(value, '__dict__'): -- cgit