diff --git a/openerp/addons/base/ir/ir_cron.py b/openerp/addons/base/ir/ir_cron.py index 2766aa29bc0..6bde5c4b468 100644 --- a/openerp/addons/base/ir/ir_cron.py +++ b/openerp/addons/base/ir/ir_cron.py @@ -86,7 +86,12 @@ class ir_cron(osv.osv, netsvc.Agent): (_check_args, 'Invalid arguments', ['args']), ] - def _callback(self, cr, uid, model, func, args): + def _handle_callback_exception(self, cr, uid, model, func, args, job_id, job_exception): + cr.rollback() + logger=logging.getLogger('cron') + logger.exception("Call of self.pool.get('%s').%s(cr, uid, *%r) failed in Job %s" % (model, func, args, job_id)) + + def _callback(self, cr, uid, model, func, args, job_id): args = str2tuple(args) m = self.pool.get(model) if m and hasattr(m, func): @@ -96,9 +101,7 @@ class ir_cron(osv.osv, netsvc.Agent): depth=(None if self._logger.isEnabledFor(logging.DEBUG_RPC_ANSWER) else 1), fn='object.execute') f(cr, uid, *args) except Exception, e: - cr.rollback() - logger=logging.getLogger('cron') - logger.exception("Job call of self.pool.get('%s').%s(cr, uid, *%r) failed" % (model, func, args)) + self._handle_callback_exception(cr, uid, model, func, args, job_id, e) def _poolJobs(self, db_name, check=False): @@ -120,7 +123,7 @@ class ir_cron(osv.osv, netsvc.Agent): if numbercall > 0: numbercall -= 1 if not ok or job['doall']: - self._callback(cr, job['user_id'], job['model'], job['function'], job['args']) + self._callback(cr, job['user_id'], job['model'], job['function'], job['args'], job['id']) if numbercall: nextcall += _intervalTypes[job['interval_type']](job['interval_number']) ok = True