CLIENT,SERVER: improve error message on client side

bzr revid: ced-6733fdd8bfd68743d3edaedf0d36da74287f11b8
This commit is contained in:
ced 2007-04-16 11:42:46 +00:00
parent 93bcf9f92d
commit 881fa80438
2 changed files with 13 additions and 10 deletions

View File

@ -209,14 +209,15 @@ class GenericXMLRPCRequestHandler:
return r return r
except Exception,e: except Exception,e:
logger = Logger() logger = Logger()
logger.notifyChannel("web-services", LOG_ERROR, 'Exception in call: ' + reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))) tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
logger.notifyChannel("web-services", LOG_ERROR, 'Exception in call: ' + tb_s)
s=str(e) s=str(e)
import tools import tools
if tools.config['debug_mode']: if tools.config['debug_mode']:
import pdb import pdb
tb = sys.exc_info()[2] tb = sys.exc_info()[2]
pdb.post_mortem(tb) pdb.post_mortem(tb)
raise xmlrpclib.Fault(1,s) raise xmlrpclib.Fault(s, tb_s)
class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): class SimpleXMLRPCRequestHandler(GenericXMLRPCRequestHandler, SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
pass pass
@ -305,14 +306,15 @@ class TinySocketClientThread(threading.Thread):
ts.mysend(r) ts.mysend(r)
except Exception, e: except Exception, e:
logger = Logger() logger = Logger()
logger.notifyChannel("web-services", LOG_ERROR, 'Exception in call: ' + reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))) tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
logger.notifyChannel("web-services", LOG_ERROR, 'Exception in call: ' + tb_s)
s=str(e) s=str(e)
import tools import tools
if tools.config['debug_mode']: if tools.config['debug_mode']:
import pdb import pdb
tb = sys.exc_info()[2] tb = sys.exc_info()[2]
pdb.post_mortem(tb) pdb.post_mortem(tb)
ts.mysend(e, exception=True) ts.mysend(e, exception=True, traceback=tb_s)
self.sock.close() self.sock.close()
self.threads.remove(self) self.threads.remove(self)
return True return True

View File

@ -23,8 +23,8 @@ class mysocket:
def disconnect(self): def disconnect(self):
self.sock.shutdown(socket.SHUT_RDWR) self.sock.shutdown(socket.SHUT_RDWR)
self.sock.close() self.sock.close()
def mysend(self, msg, exception=False): def mysend(self, msg, exception=False, traceback=None):
msg = cPickle.dumps(msg) msg = cPickle.dumps([msg,traceback])
size = len(msg) size = len(msg)
self.sock.send('%8d' % size) self.sock.send('%8d' % size)
self.sock.send(exception and "1" or "0") self.sock.send(exception and "1" or "0")
@ -54,9 +54,10 @@ class mysocket:
raise RuntimeError, "socket connection broken" raise RuntimeError, "socket connection broken"
msg = msg + chunk msg = msg + chunk
res = cPickle.loads(msg) res = cPickle.loads(msg)
if isinstance(res,Exception): if isinstance(res[0],Exception):
if exception: if exception:
raise Myexception(exception, str(res)) raise Myexception(exception, str(res[0]), str(res[1]))
raise res raise res[0]
else: else:
return res return res[0]