@@ -49,12 +49,10 @@ def handle_error(self, exception_or_failure, request):
4949 :return: dict which will be converted to JSON error response
5050
5151 """
52- failure = None
5352 if isinstance (exception_or_failure , Exception ):
5453 exception = exception_or_failure
5554 elif isinstance (exception_or_failure , Failure ):
5655 exception = exception_or_failure .value
57- failure = exception_or_failure
5856 else :
5957 raise TypeError (
6058 'Expected Exception or {} instances, got {}' .format (
@@ -71,22 +69,27 @@ def handle_error(self, exception_or_failure, request):
7169 else :
7270 request .setResponseCode (500 )
7371 if request .code == 500 :
74- log .err (failure )
72+ log .err (str ( exception_or_failure ) )
7573 return self .format_error_response (exception , request )
7674
7775 def format_error_response (self , exception , request ):
7876 # Python exceptions don't have message attribute in Python 3+ anymore.
7977 # Twisted HTTP Error objects still have 'message' attribute even in 3+
8078 # and they fail on str(exception) call.
8179 msg = exception .message if hasattr (exception , 'message' ) else str (exception )
80+
8281 return {
8382 "status" : "error" ,
8483 "message" : msg ,
8584 "code" : request .code
8685 }
8786
8887 def render_object (self , obj , request ):
89- r = self .json_encoder .encode (obj ) + "\n "
88+ try :
89+ r = self .json_encoder .encode (obj ) + "\n "
90+ except Exception as e :
91+ return self .json_encoder .encode (self .handle_error (e , request )).encode ('utf8' )
92+
9093 request .setHeader ('Content-Type' , 'application/json' )
9194 request .setHeader ('Access-Control-Allow-Origin' , '*' )
9295 request .setHeader ('Access-Control-Allow-Methods' ,
0 commit comments