Last active
October 5, 2015 15:38
-
-
Save florentx/2829227 to your computer and use it in GitHub Desktop.
Trace your OpenERP errors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
=== modified file 'openerp/osv/osv.py' | |
--- openerp/osv/osv.py 2012-02-08 16:13:12 +0000 | |
+++ openerp/osv/osv.py 2012-05-08 21:50:42 +0000 | |
@@ -23,6 +23,8 @@ | |
from functools import wraps | |
import logging | |
+import sys | |
+import traceback | |
from psycopg2 import IntegrityError, errorcodes | |
import orm | |
@@ -45,6 +47,20 @@ | |
service = None | |
+ | |
+def _pformat(f, dbname, args, kwargs): | |
+ arglist = [repr(dbname)] | |
+ arglist.extend([repr(arg) for arg in args]) | |
+ arglist.extend(['%s=%r' % item for item in kwargs.items()]) | |
+ return '%s(%s)' % (f.__name__, ', '.join(arglist)) | |
+ | |
+ | |
+def _traceback(f, dbname, args, kwargs): | |
+ tb = traceback.format_exception(*sys.exc_info()) | |
+ tb.append('while calling object.%s\n' % _pformat(f, dbname, args, kwargs)) | |
+ return ''.join(tb) | |
+ | |
+ | |
class object_proxy(object): | |
def __init__(self): | |
global service | |
@@ -120,10 +136,15 @@ | |
raise except_osv('Database not ready', 'Currently, this database is not fully loaded and can not be used.') | |
+ _logger.debug('... calling object.%s', _pformat(f, dbname, args, kwargs)) | |
return f(self, dbname, *args, **kwargs) | |
except orm.except_orm, inst: | |
+ tb_s = _traceback(f, dbname, args, kwargs) | |
+ _logger.error(tb_s) | |
raise except_osv(inst.name, inst.value) | |
except except_osv: | |
raise | |
except IntegrityError, inst: | |
+ tb_s = _traceback(f, dbname, args, kwargs) | |
+ _logger.error(tb_s) | |
osv_pool = pooler.get_pool(dbname) | |
for key in osv_pool._sql_error.keys(): | |
if key in inst[0]: | |
@@ -152,7 +173,9 @@ | |
else: | |
netsvc.abort_response(1, _('Integrity Error'), 'warning', inst[0]) | |
except Exception: | |
+ tb_s = _traceback(f, dbname, args, kwargs) | |
_logger.exception("Uncaught exception") | |
+ _logger.error(tb_s) | |
raise | |
return wrapper | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment