[ENG-1104] patch json.dumps
to handle __wrapped__
objects
Unwrap proxied objects if the default serializer doesn't work.
This commit is contained in:
parent
b1d449897a
commit
35b6139648
@ -8,6 +8,7 @@ import copy
|
|||||||
import dataclasses
|
import dataclasses
|
||||||
import functools
|
import functools
|
||||||
import inspect
|
import inspect
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import pickle
|
import pickle
|
||||||
import sys
|
import sys
|
||||||
@ -3753,6 +3754,40 @@ def serialize_mutable_proxy(mp: MutableProxy):
|
|||||||
return mp.__wrapped__
|
return mp.__wrapped__
|
||||||
|
|
||||||
|
|
||||||
|
_orig_json_dumps = json.dumps
|
||||||
|
|
||||||
|
|
||||||
|
def _json_dumps_wrapper(*args, **kwargs):
|
||||||
|
"""Wrap json.dumps to handle MutableProxy objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
*args: args for json.dumps.
|
||||||
|
**kwargs: kwargs for json.dumps.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The JSON string.
|
||||||
|
"""
|
||||||
|
_orig_default = kwargs.pop("default", None)
|
||||||
|
|
||||||
|
def _default(obj):
|
||||||
|
if _orig_default is not None:
|
||||||
|
try:
|
||||||
|
return _orig_default(obj)
|
||||||
|
except TypeError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
return obj.__wrapped__
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
raise TypeError()
|
||||||
|
|
||||||
|
kwargs["default"] = _default
|
||||||
|
return _orig_json_dumps(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
json.dumps = _json_dumps_wrapper
|
||||||
|
|
||||||
|
|
||||||
class ImmutableMutableProxy(MutableProxy):
|
class ImmutableMutableProxy(MutableProxy):
|
||||||
"""A proxy for a mutable object that tracks changes.
|
"""A proxy for a mutable object that tracks changes.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user