From c844422d201d68f70507c48b2fad98aa51aee514 Mon Sep 17 00:00:00 2001 From: ced <> Date: Wed, 5 Sep 2007 14:02:26 +0000 Subject: [PATCH] Improve exception: don't log exception_{osv, orm, wizard} bzr revid: ced-6bdaf4ebdab2dcded046448506f94daa0edc4c70 --- bin/netsvc.py | 11 ++++------- bin/osv/osv.py | 11 ++++++++++- bin/wizard/__init__.py | 16 +++++++++++++--- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/bin/netsvc.py b/bin/netsvc.py index 560384abc27..c5a9c245bf4 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -86,7 +86,7 @@ class Service(object): self._response_process=None self._response=s(self._response_process_id) - def abortResponse(self,error, description, origin, details): + def abortResponse(self, error, description, origin, details): import tools if not tools.config['debug_mode']: raise Exception("%s -- %s\n\n%s"%(origin,description,details)) @@ -208,10 +208,9 @@ class GenericXMLRPCRequestHandler: if res!=None: r=res return r - except Exception,e: - logger = Logger() - 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) + except Exception, e: + tb_s = reduce(lambda x, y: x+y, traceback.format_exception( + sys.exc_type, sys.exc_value, sys.exc_traceback)) s=str(e) import tools if tools.config['debug_mode']: @@ -320,9 +319,7 @@ class TinySocketClientThread(threading.Thread): r=res ts.mysend(r) except Exception, e: - logger = Logger() 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) import tools if tools.config['debug_mode']: diff --git a/bin/osv/osv.py b/bin/osv/osv.py index c4f748741ef..4cc9cf39757 100644 --- a/bin/osv/osv.py +++ b/bin/osv/osv.py @@ -34,8 +34,10 @@ import orm import netsvc import pooler import copy +import sys import psycopg +from netsvc import Logger, LOG_ERROR module_list = [] module_class_list = {} @@ -101,7 +103,14 @@ class osv_pool(netsvc.Service): self.abortResponse(1, 'Constraint Error', 'warning', self._sql_error[key]) self.abortResponse(1, 'Integrity Error', 'warning', inst[0]) - + except Exception, e: + import traceback + tb_s = reduce(lambda x, y: x+y, traceback.format_exception( + sys.exc_type, sys.exc_value, sys.exc_traceback)) + logger = Logger() + logger.notifyChannel("web-services", LOG_ERROR, + 'Exception in call: ' + tb_s) + raise def execute(self, db, uid, obj, method, *args, **kw): db, pool = pooler.get_db_and_pool(db) diff --git a/bin/wizard/__init__.py b/bin/wizard/__init__.py index c2343cc9eff..093e2ce7fa4 100644 --- a/bin/wizard/__init__.py +++ b/bin/wizard/__init__.py @@ -36,11 +36,14 @@ import pooler from osv.osv import except_osv from osv.orm import except_orm +from netsvc import Logger, LOG_ERROR +import sys class except_wizard(Exception): def __init__(self, name, value): self.name = name self.value = value + self.args = (name, value) class interface(netsvc.Service): states = {} @@ -82,9 +85,6 @@ class interface(netsvc.Service): lang = context.get('lang', False) if result_def['type'] == 'action': res['action'] = result_def['action'](self, cr, uid, data, context) - elif result_def['type'] == 'choice': - next_state = result_def['next_state'](self, cr, uid, data, context) - return self.execute_cr(cr, uid, data, next_state, context) elif result_def['type'] == 'form': fields = copy.copy(result_def['fields']) arch = copy.copy(result_def['arch']) @@ -146,7 +146,17 @@ class interface(netsvc.Service): or isinstance(e, except_orm): self.abortResponse(2, e.name, 'warning', e.value) else: + import traceback + tb_s = reduce(lambda x, y: x+y, traceback.format_exception( + sys.exc_type, sys.exc_value, sys.exc_traceback)) + logger = Logger() + logger.notifyChannel("web-services", LOG_ERROR, + 'Exception in call: ' + tb_s) raise + + if result_def['type'] == 'choice': + next_state = result_def['next_state'](self, cr, uid, data, context) + return self.execute_cr(cr, uid, data, next_state, context) return res def execute(self, db, uid, data, state='init', context=None):