summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Smith <danms@us.ibm.com>2013-06-25 10:19:42 -0700
committerDan Smith <danms@us.ibm.com>2013-06-25 10:19:42 -0700
commitf3ea43de32289fa9c3d92330bcbbbebf5f1e81ff (patch)
tree73efef8a35935dfa97861fe86a8e80f53977283b
parentc90c85212f5ab989c29ebc07cc8dcdebc1991fcb (diff)
downloadoslo-serialization-f3ea43de32289fa9c3d92330bcbbbebf5f1e81ff.tar.gz
Add netaddr.IPAddress support to to_primitive()
This enlightens jsonutils.to_primitive() about how to serialize netaddr.IPAddress objects. Since these types are serializable in their native form with just string coercion, just do that here. Fixes bug 1195097 Change-Id: I358b0731e4d3774e5b36aefb5384fdfb75fd31b6
-rw-r--r--openstack/common/jsonutils.py3
-rw-r--r--tests/unit/test_jsonutils.py6
2 files changed, 9 insertions, 0 deletions
diff --git a/openstack/common/jsonutils.py b/openstack/common/jsonutils.py
index bf23403..9c72376 100644
--- a/openstack/common/jsonutils.py
+++ b/openstack/common/jsonutils.py
@@ -41,6 +41,7 @@ import json
import types
import xmlrpclib
+import netaddr
import six
from openstack.common import timeutils
@@ -137,6 +138,8 @@ def to_primitive(value, convert_instances=False, convert_datetime=True,
# Likely an instance of something. Watch for cycles.
# Ignore class member vars.
return recursive(value.__dict__, level=level + 1)
+ elif isinstance(value, netaddr.IPAddress):
+ return six.text_type(value)
else:
if any(test(value) for test in _nasty_type_tests):
return six.text_type(value)
diff --git a/tests/unit/test_jsonutils.py b/tests/unit/test_jsonutils.py
index 758455b..28d588e 100644
--- a/tests/unit/test_jsonutils.py
+++ b/tests/unit/test_jsonutils.py
@@ -18,6 +18,7 @@
import datetime
import xmlrpclib
+import netaddr
from six import StringIO
from openstack.common import jsonutils
@@ -170,3 +171,8 @@ class ToPrimitiveTestCase(utils.BaseTestCase):
ret = jsonutils.to_primitive(l4_obj, max_depth=4)
self.assertEquals(ret, json_l4)
+
+ def test_ipaddr(self):
+ thing = {'ip_addr': netaddr.IPAddress('1.2.3.4')}
+ ret = jsonutils.to_primitive(thing)
+ self.assertEquals({'ip_addr': '1.2.3.4'}, ret)