@@ -94,11 +94,13 @@ def _process(self, commit=False):
9494 job .store ()
9595 _logger .debug ("%s postponed" , job )
9696
97- except (FailedJobError , Exception ):
97+ except (FailedJobError , Exception ) as orig_exception :
9898 with StringIO () as buff :
9999 traceback .print_exc (file = buff )
100- _logger .error (buff .getvalue ())
101- job .set_failed (exc_info = buff .getvalue ())
100+ traceback_txt = buff .getvalue ()
101+ _logger .error (traceback_txt )
102+ vals = self ._get_failure_values (job , traceback_txt , orig_exception )
103+ job .set_failed (** vals )
102104 job .store ()
103105
104106 if commit : # pragma: no cover
@@ -109,6 +111,18 @@ def _process(self, commit=False):
109111 job .enqueue_waiting ()
110112 _logger .debug ("%s enqueue depends done" , job )
111113
114+ def _get_failure_values (self , job , traceback_txt , orig_exception ):
115+ """Collect relevant data from exception."""
116+ exception_name = orig_exception .__class__ .__name__
117+ if hasattr (orig_exception , "__module__" ):
118+ exception_name = orig_exception .__module__ + "." + exception_name
119+ exc_message = getattr (orig_exception , "name" , str (orig_exception ))
120+ return {
121+ "exc_info" : traceback_txt ,
122+ "exc_name" : exception_name ,
123+ "exc_message" : exc_message ,
124+ }
125+
112126 @api .model
113127 def _job_runner (self , commit = True ):
114128 """Short-lived job runner, triggered by async crons"""
0 commit comments