Open droneshire opened 2 weeks ago
Describe the bug Exception is thrown when using the sort_keys=True kwarg when using the to_json() method of a deepdiff.Deepdiff() object.
sort_keys=True
to_json()
deepdiff.Deepdiff()
The bug is in the serialization.py code if orjson is defined/used:
serialization.py
orjson
def json_dumps(item, default_mapping=None, **kwargs): """ Dump json with extra details that are not normally json serializable """ if orjson: indent = kwargs.pop('indent', None) sort_keys = kwargs.pop('sort_keys', None) if indent: kwargs['option'] = orjson.OPT_INDENT_2 return orjson.dumps( item, default=json_convertor_default(default_mapping=default_mapping), **kwargs).decode(encoding='utf-8') else: return json.dumps( item, default=json_convertor_default(default_mapping=default_mapping), **kwargs)
The fix would seem to be to handle all of the supported kwargs and translate them to their respective orjson opt. I.e. add in the following lines:
if sort_keys: kwargs['sort_keys'] = orjson.OPT_SORT_KEYS ... etc
To Reproduce
NOTE: Need the orjson import to be defined (I'm not sure what allows this to happen, but the bug is hidden behind the if orjson: conditional
if orjson:
Otherwise can just do the following:
diff = deepdiff.DeepDiff(dict1, dict2) if diff: diff.to_json(indent=4, sort_keys=True)
Expected behavior
diff.to_json() should not choke on standard json.dumps() kwargs (e.g. sort_keys)
diff.to_json()
sort_keys
OS, DeepDiff version and Python version (please complete the following information):
deepdiff==7.0.1
My hack workaround in meantime:
diff_json = diff.to_json() diff_json_sorted = json.dumps(json.loads(diff_json), indent=4, sort_keys=True)
Describe the bug Exception is thrown when using the
sort_keys=True
kwarg when using theto_json()
method of adeepdiff.Deepdiff()
object.The bug is in the
serialization.py
code iforjson
is defined/used:The fix would seem to be to handle all of the supported kwargs and translate them to their respective orjson opt. I.e. add in the following lines:
To Reproduce
NOTE: Need the
orjson
import to be defined (I'm not sure what allows this to happen, but the bug is hidden behind theif orjson:
conditionalOtherwise can just do the following:
Expected behavior
diff.to_json()
should not choke on standard json.dumps() kwargs (e.g.sort_keys
)OS, DeepDiff version and Python version (please complete the following information):
deepdiff==7.0.1