Cast keys recursively including iterables (issue 1639 syntax error)
This commit is contained in:
+11
-8
@@ -47,20 +47,23 @@ def cast_keys(o, cast=str, encoding="utf-8"):
|
||||
newobj = dict()
|
||||
else:
|
||||
newobj = Storage()
|
||||
|
||||
for k, v in o.items():
|
||||
if (cast == str) and isinstance(k, unicode):
|
||||
key = k.encode(encoding)
|
||||
else:
|
||||
key = cast(k)
|
||||
if isinstance(v, (dict, Storage)):
|
||||
value = cast_keys(v, cast=cast, encoding=encoding)
|
||||
else:
|
||||
value = v
|
||||
newobj[key] = value
|
||||
newobj[key] = cast_keys(v, cast=cast, encoding=encoding)
|
||||
elif isinstance(o, (tuple, set, list)):
|
||||
newobj = []
|
||||
for item in o:
|
||||
newobj.append(cast_keys(item, cast=cast, encoding=encoding))
|
||||
if isinstance(o, tuple):
|
||||
newobj = tuple(newobj)
|
||||
elif isinstance(o, set):
|
||||
newobj = set(newobj)
|
||||
else:
|
||||
raise TypeError("Cannot cast keys: %s is not supported" % \
|
||||
type(o))
|
||||
# no string cast (unknown object)
|
||||
newobj = o
|
||||
return newobj
|
||||
|
||||
def loads_json(o, unicode_keys=True, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user