From e18f658d80beeea199b03b989672ab132308f59e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Malo=C5=A1t=C3=ADk?= <jakub@alderamin.localdomain> Date: Mon, 6 Mar 2023 19:29:50 +0200 Subject: [PATCH] Create a JSON Encoder class --- warden_server/warden_server.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/warden_server/warden_server.py b/warden_server/warden_server.py index e644317..e52e06b 100755 --- a/warden_server/warden_server.py +++ b/warden_server/warden_server.py @@ -47,6 +47,12 @@ from jsonschema import Draft4Validator VERSION = "3.0-beta3" +class Encoder(json.JSONEncoder): + def default(self, o): + if isinstance(o, Error): + return o.to_dict() + return str(o) + class Error(Exception): def __init__(self, method=None, req_id=None, errors=None, **kwargs): @@ -108,7 +114,7 @@ class Error(Exception): ecopy.pop("message", None) ecopy.pop("exc", None) if ecopy: - out = "Detail: %s" % (json.dumps(ecopy, default=lambda v: str(v))) + out = "Detail: %s" % (json.dumps(ecopy, cls=Encoder)) else: out = "" return out @@ -1527,7 +1533,7 @@ class Server(ObjectBase): if exception: status = "%d %s" % exception.get_http_err_msg() - output = json.dumps(exception.to_dict(), default=lambda v: str(v)) + output = json.dumps(exception, cls=Encoder) exception.log(self.log) # Make sure everything is properly encoded - JSON and various function @@ -1567,9 +1573,7 @@ def json_wrapper(method): result = method(self, **args) # call requested method try: - # 'default': takes care of non JSON serializable objects, - # which could (although shouldn't) appear in handler code - output = json.dumps(result, default=lambda v: str(v)) + output = json.dumps(result, cls=Encoder) except Exception as e: raise self.req.error(message="Serialization error", error=500, exc=sys.exc_info(), args=str(result)) -- GitLab