From f15758dbea6be0894cdc2fcc19ec9d2428c797f1 Mon Sep 17 00:00:00 2001 From: Pavel Zuna Date: Tue, 10 Aug 2010 16:40:00 -0400 Subject: Improve serialization to JSON. - Make it recursive. - Make Param classes serializable. - Take python native data types into account. --- ipalib/util.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'ipalib/util.py') diff --git a/ipalib/util.py b/ipalib/util.py index ba111d46b..4aff88f83 100644 --- a/ipalib/util.py +++ b/ipalib/util.py @@ -27,15 +27,25 @@ import logging import time import krbV import socket +from types import NoneType + from ipalib import errors from ipapython import dnsclient def json_serialize(obj): + if isinstance(obj, (list, tuple)): + return [json_serialize(o) for o in obj] + if isinstance(obj, dict): + return dict((k, json_serialize(v)) for (k, v) in obj.iteritems()) + if isinstance(obj, (bool, float, int, unicode, NoneType)): + return obj + if isinstance(obj, str): + return obj.decode('utf-8') if not callable(getattr(obj, '__json__', None)): # raise TypeError('%r is not JSON serializable') return '' - return obj.__json__() + return json_serialize(obj.__json__()) def get_current_principal(): try: -- cgit