From d0613d2a42a062cf4d0b0c9c6ea32bfbb01f278d Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Fri, 5 May 2006 15:27:55 -0400 Subject: [PATCH] Second try at printing tracebacks --- chat/network.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/chat/network.py b/chat/network.py index dc80a943..011c92fc 100644 --- a/chat/network.py +++ b/chat/network.py @@ -75,6 +75,44 @@ class GlibXMLRPCServer(GlibTCPServer, SimpleXMLRPCServer.SimpleXMLRPCDispatcher) SimpleXMLRPCServer.SimpleXMLRPCDispatcher.__init__(self) GlibTCPServer.__init__(self, addr, requestHandler) + def _marshaled_dispatch(self, data, dispatch_method = None): + """Dispatches an XML-RPC method from marshalled (XML) data. + + XML-RPC methods are dispatched from the marshalled (XML) data + using the _dispatch method and the result is returned as + marshalled data. For backwards compatibility, a dispatch + function can be provided as an argument (see comment in + SimpleXMLRPCRequestHandler.do_POST) but overriding the + existing method through subclassing is the prefered means + of changing method dispatch behavior. + """ + + params, method = xmlrpclib.loads(data) + + # generate response + try: + if dispatch_method is not None: + response = dispatch_method(method, params) + else: + response = self._dispatch(method, params) + # wrap response in a singleton tuple + response = (response,) + response = xmlrpclib.dumps(response, methodresponse=1) + except Fault, fault: + response = xmlrpclib.dumps(fault) + except: + set = sys.exc_type + sev = sys.exc_value + ser = sys.exc_traceback + + # report exception back to server + response = xmlrpclib.dumps(xmlrpclib.Fault(1, "%s:%s" % (set, sev))) + + print "Exception while processing request:" + traceback.print_exception(set, sev, ser) + + return response + class GroupChatController(object):