Procházet zdrojové kódy

[Py3] Fixes internal error reporting on Python 3

Ask Solem před 11 roky
rodič
revize
30d1b2568d
2 změnil soubory, kde provedl 4 přidání a 3 odebrání
  1. 1 1
      celery/app/trace.py
  2. 3 2
      celery/backends/base.py

+ 1 - 1
celery/app/trace.py

@@ -341,7 +341,7 @@ def eager_trace_task(task, uuid, args, kwargs, request=None, **opts):
 def report_internal_error(task, exc):
     _type, _value, _tb = sys.exc_info()
     try:
-        _value = task.backend.prepare_exception(exc)
+        _value = task.backend.prepare_exception(exc, 'pickle')
         exc_info = ExceptionInfo((_type, _value, _tb), internal=True)
         warn(RuntimeWarning(
             'Exception raised outside body: {0!r}:\n{1}'.format(

+ 3 - 2
celery/backends/base.py

@@ -152,9 +152,10 @@ class BaseBackend(object):
                                  status=states.REVOKED, traceback=None,
                                  request=request)
 
-    def prepare_exception(self, exc):
+    def prepare_exception(self, exc, serializer=None):
         """Prepare exception for serialization."""
-        if self.serializer in EXCEPTION_ABLE_CODECS:
+        serializer = self.serializer if serializer is None else serializer
+        if serializer in EXCEPTION_ABLE_CODECS:
             return get_pickleable_exception(exc)
         return {'exc_type': type(exc).__name__, 'exc_message': str(exc)}