Cast keys recursively including iterables (issue 1639 syntax error)

This commit is contained in:
spametki
2013-09-04 16:19:59 -03:00
parent af202868bc
commit 44aa9483a4
+11 -8
View File
@@ -47,20 +47,23 @@ def cast_keys(o, cast=str, encoding="utf-8"):
newobj = dict() newobj = dict()
else: else:
newobj = Storage() newobj = Storage()
for k, v in o.items(): for k, v in o.items():
if (cast == str) and isinstance(k, unicode): if (cast == str) and isinstance(k, unicode):
key = k.encode(encoding) key = k.encode(encoding)
else: else:
key = cast(k) key = cast(k)
if isinstance(v, (dict, Storage)): newobj[key] = cast_keys(v, cast=cast, encoding=encoding)
value = cast_keys(v, cast=cast, encoding=encoding) elif isinstance(o, (tuple, set, list)):
else: newobj = []
value = v for item in o:
newobj[key] = value newobj.append(cast_keys(item, cast=cast, encoding=encoding))
if isinstance(o, tuple):
newobj = tuple(newobj)
elif isinstance(o, set):
newobj = set(newobj)
else: else:
raise TypeError("Cannot cast keys: %s is not supported" % \ # no string cast (unknown object)
type(o)) newobj = o
return newobj return newobj
def loads_json(o, unicode_keys=True, **kwargs): def loads_json(o, unicode_keys=True, **kwargs):