Skip to content

Instantly share code, notes, and snippets.

@florentx
Last active October 5, 2015 15:38
Show Gist options
  • Save florentx/2829227 to your computer and use it in GitHub Desktop.
Save florentx/2829227 to your computer and use it in GitHub Desktop.
Trace your OpenERP errors
=== 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