def unfreeze(o): if isinstance(o, (dict, frozendict)): return dict({k: unfreeze(v) for k, v in o.items()}) if isinstance(o, (binary_type, text_type)): return o try: return [unfreeze(i) for i in o] except TypeError: pass return o def _handle_frozendict(obj): """Helper for EventEncoder. Makes frozendicts serializable by returning the underlying dict """ if type(obj) is frozendict: # fishing the protected dict out of the object is a bit nasty, # but we don't really want the overhead of copying the dict. return obj._dict raise TypeError("Object of type %s is not JSON serializable" % obj.__class__.__name__) # A JSONEncoder which is capable of encoding frozendics without barfing frozendict_json_encoder = json.JSONEncoder(default=_handle_frozendict)
from twisted.internet import defer, task from synapse.logging import context logger = logging.getLogger(__name__) def _reject_invalid_json(val): """Do not allow Infinity, -Infinity, or NaN values in JSON.""" raise ValueError("Invalid JSON value: '%s'" % val) # Create a custom encoder to reduce the whitespace produced by JSON encoding and # ensure that valid JSON is produced. json_encoder = json.JSONEncoder(allow_nan=False, separators=(",", ":")) # Create a custom decoder to reject Python extensions to JSON. json_decoder = json.JSONDecoder(parse_constant=_reject_invalid_json) def unwrapFirstError(failure): # defer.gatherResults and DeferredLists wrap failures. failure.trap(defer.FirstError) return failure.value.subFailure @attr.s class Clock: """ A Clock wraps a Twisted reactor and provides utilities on top of it.
if isinstance(o, (bytes, str)): return o try: return [unfreeze(i) for i in o] except TypeError: pass return o def _handle_frozendict(obj): """Helper for EventEncoder. Makes frozendicts serializable by returning the underlying dict """ if type(obj) is frozendict: # fishing the protected dict out of the object is a bit nasty, # but we don't really want the overhead of copying the dict. return obj._dict raise TypeError("Object of type %s is not JSON serializable" % obj.__class__.__name__) # A JSONEncoder which is capable of encoding frozendicts without barfing. # Additionally reduce the whitespace produced by JSON encoding. frozendict_json_encoder = json.JSONEncoder( default=_handle_frozendict, separators=(",", ":"), )
# limitations under the License. import logging import re import attr from canonicaljson import json from twisted.internet import defer, task from synapse.logging import context logger = logging.getLogger(__name__) # Create a custom encoder to reduce the whitespace produced by JSON encoding. json_encoder = json.JSONEncoder(separators=(",", ":")) def unwrapFirstError(failure): # defer.gatherResults and DeferredLists wrap failures. failure.trap(defer.FirstError) return failure.value.subFailure @attr.s class Clock(object): """ A Clock wraps a Twisted reactor and provides utilities on top of it. Args: reactor: The Twisted reactor to use.