diff options
author | Dan Williams <dcbw@redhat.com> | 2006-05-05 19:27:55 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2006-05-05 19:27:55 (GMT) |
commit | d0613d2a42a062cf4d0b0c9c6ea32bfbb01f278d (patch) | |
tree | 35131c60a59019a8be6784e5c0d637160e3d3b26 /chat | |
parent | d984e98de858c1c05b91eba81ed859187ff68469 (diff) |
Second try at printing tracebacks
Diffstat (limited to 'chat')
-rw-r--r-- | chat/network.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/chat/network.py b/chat/network.py index dc80a94..011c92f 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): |