Print local traceback on XMLRPC server exceptions
This commit is contained in:
parent
06fb5b3e8a
commit
ca378af286
@ -341,7 +341,7 @@ class GroupChat(Chat):
|
||||
def _buddy_recv_message(self, sender, msg):
|
||||
chat = sender.chat()
|
||||
if not chat:
|
||||
chat = BuddyChat(self, sender)
|
||||
chat = BuddyChat(self._parent, sender)
|
||||
sender.set_chat(chat)
|
||||
chat.activity_connect_to_shell()
|
||||
chat.recv_message(message)
|
||||
|
@ -75,6 +75,40 @@ 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:
|
||||
traceback.print_exc()
|
||||
# report exception back to server
|
||||
response = xmlrpclib.dumps(
|
||||
xmlrpclib.Fault(1, "%s:%s" % (sys.exc_type, sys.exc_value))
|
||||
)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
class GroupChatController(object):
|
||||
|
||||
|
@ -13,7 +13,7 @@ class GroupRequestHandler(object):
|
||||
|
||||
def message(self, message):
|
||||
address = network.get_authinfo()
|
||||
self._group.recv(address[0], message)
|
||||
self._group.recv(address, message)
|
||||
|
||||
class Owner:
|
||||
instance = None
|
||||
|
Loading…
Reference in New Issue
Block a user