diff options
Diffstat (limited to 'g_sorcery/serialization.py')
-rw-r--r-- | g_sorcery/serialization.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/g_sorcery/serialization.py b/g_sorcery/serialization.py index 3a7704b..b5d71f3 100644 --- a/g_sorcery/serialization.py +++ b/g_sorcery/serialization.py @@ -14,6 +14,8 @@ import json import importlib +from .compatibility import basestring + def step_to_raw_serializable(obj): """ Make one step of convertion of object @@ -40,19 +42,22 @@ def to_raw_serializable(obj): Convert object to the raw serializable type. Logic is the same as in the standard json encoder. """ - if isinstance(obj, str) \ + if isinstance(obj, basestring) \ or obj is None \ or obj is True \ or obj is False \ or isinstance(obj, int) \ - or isinstance(obj, float) \ - or isinstance(obj, (list, tuple)) \ - or isinstance(obj, dict): + or isinstance(obj, float): return obj + elif isinstance(obj, dict): + return {k: to_raw_serializable(v) for k, v in obj.items()} + elif isinstance(obj, (list, tuple)): + return [to_raw_serializable(item) for item in obj] + else: sobj = step_to_raw_serializable(obj) if not sobj: - raise TypeError('Non serializable object: ', sobj) + raise TypeError('Non serializable object: ', obj) return to_raw_serializable(sobj) |