From: Naresh (OpenERP) Date: Thu, 15 Dec 2011 06:46:02 +0000 (+0530) Subject: [FIX]:exception handling in netrpc X-Git-Tag: 6.1.0-rc1-addons~389^2 X-Git-Url: http://git.inspyration.org/?a=commitdiff_plain;h=2fb2cd708d459ac32808136b5bcd54142b2f653e;p=odoo%2Fodoo.git [FIX]:exception handling in netrpc lp bug: https://launchpad.net/bugs/869936 fixed bzr revid: nch@tinyerp.com-20111215064602-m1x9fflb20l5kw5a --- diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index c15ed51..f86d6d2 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -31,7 +31,7 @@ import socket import sys import threading import traceback - +import openerp import openerp.netsvc as netsvc import openerp.tiny_socket as tiny_socket import openerp.tools as tools @@ -66,11 +66,11 @@ class TinySocketClientThread(threading.Thread): break except Exception, e: try: - new_e = Exception(tools.exception_to_unicode(e)) # avoid problems of pickeling - tb = getattr(e, 'traceback', sys.exc_info()) - tb_s = "".join(traceback.format_exception(*tb)) + valid_exception = Exception(netrpc_handle_exception_legacy(e)) + valid_traceback = getattr(e, 'traceback', sys.exc_info()) + formatted_traceback = "".join(traceback.format_exception(*valid_traceback)) logging.getLogger('web-services').debug("netrpc: communication-level exception", exc_info=True) - ts.mysend(new_e, exception=True, traceback=tb_s) + ts.mysend(valid_exception, exception=True, traceback=formatted_traceback) break except Exception, ex: #terminate this channel if we can't properly send back the error @@ -85,7 +85,17 @@ class TinySocketClientThread(threading.Thread): def stop(self): self.running = False - + +def netrpc_handle_exception_legacy(e): + if isinstance(e, openerp.osv.osv.except_osv): + return 'warning -- ' + e.name + '\n\n' + e.value + if isinstance(e, openerp.exceptions.Warning): + return 'warning -- Warning\n\n' + str(e) + if isinstance(e, openerp.exceptions.AccessError): + return 'warning -- AccessError\n\n' + str(e) + if isinstance(e, openerp.exceptions.AccessDenied): + return 'AccessDenied ' + str(e) + return openerp.tools.exception_to_unicode(e) class TinySocketServerThread(threading.Thread,netsvc.Server): def __init__(self, interface, port, secure=False):