Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/chat
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2006-05-05 19:27:55 (GMT)
committer Dan Williams <dcbw@redhat.com>2006-05-05 19:27:55 (GMT)
commitd0613d2a42a062cf4d0b0c9c6ea32bfbb01f278d (patch)
tree35131c60a59019a8be6784e5c0d637160e3d3b26 /chat
parentd984e98de858c1c05b91eba81ed859187ff68469 (diff)
Second try at printing tracebacks
Diffstat (limited to 'chat')
-rw-r--r--chat/network.py38
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):