diff options
author | Pavel Zuna <pzuna@redhat.com> | 2010-08-10 16:40:00 -0400 |
---|---|---|
committer | Rob Crittenden <rcritten@redhat.com> | 2010-08-12 09:06:22 -0400 |
commit | f15758dbea6be0894cdc2fcc19ec9d2428c797f1 (patch) | |
tree | 7b414f943c41957f1f412dbdc4150f9c45b884b3 /ipalib/util.py | |
parent | 58fd1199f644a07b189087b09fdacbda74b11f27 (diff) | |
download | freeipa-f15758dbea6be0894cdc2fcc19ec9d2428c797f1.tar.gz freeipa-f15758dbea6be0894cdc2fcc19ec9d2428c797f1.tar.xz freeipa-f15758dbea6be0894cdc2fcc19ec9d2428c797f1.zip |
Improve serialization to JSON.
- Make it recursive.
- Make Param classes serializable.
- Take python native data types into account.
Diffstat (limited to 'ipalib/util.py')
-rw-r--r-- | ipalib/util.py | 12 |
1 files changed, 11 insertions, 1 deletions
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: |