Clean json returned from server for keys with None values

Add testing
This commit is contained in:
Odd Stråbø 2020-08-21 15:09:34 +02:00
parent 8a3ca73d52
commit ed96dc8ad5
7 changed files with 188 additions and 4 deletions

View file

@ -0,0 +1,43 @@
from six import string_types
from six.moves import collections_abc
def clean_none_dict_values(obj):
"""
Recursively remove keys with a value of None
"""
if not isinstance(obj, collections_abc.Iterable) or isinstance(obj, string_types):
return obj
queue = [obj]
while queue:
item = queue.pop()
if isinstance(item, collections_abc.Mapping):
mutable = isinstance(item, collections_abc.MutableMapping)
remove = []
for key, value in item.items():
if value is None and mutable:
remove.append(key)
elif isinstance(value, string_types):
continue
elif isinstance(value, collections_abc.Iterable):
queue.append(value)
if mutable:
# Remove keys with None value
for key in remove:
item.pop(key)
elif isinstance(item, collections_abc.Iterable):
for value in item:
if value is None or isinstance(value, string_types):
continue
elif isinstance(value, collections_abc.Iterable):
queue.append(value)
return obj