소스 검색

celery.execute.apply: Should return exception, not ExceptionInfo on error.
Closes #111. Thanks to jonozzz

Ask Solem 15 년 전
부모
커밋
3ef777fb66
2개의 변경된 파일4개의 추가작업 그리고 1개의 파일을 삭제
  1. 3 0
      celery/execute/__init__.py
  2. 1 1
      celery/result.py

+ 3 - 0
celery/execute/__init__.py

@@ -5,6 +5,7 @@ from celery.execute.trace import TaskTrace
 from celery.registry import tasks
 from celery.messaging import with_connection
 from celery.messaging import TaskPublisher
+from celery.datastructures import ExceptionInfo
 
 extract_exec_options = mattrgetter("routing_key", "exchange",
                                    "immediate", "mandatory",
@@ -161,4 +162,6 @@ def apply(task, args, kwargs, **options):
 
     trace = TaskTrace(task.name, task_id, args, kwargs, task=task)
     retval = trace.execute()
+    if isinstance(retval, ExceptionInfo):
+        retval = retval.exception
     return EagerResult(task_id, retval, trace.status, traceback=trace.strtb)

+ 1 - 1
celery/result.py

@@ -371,7 +371,7 @@ class EagerResult(BaseAsyncResult):
         if self.status == states.SUCCESS:
             return self.result
         elif self.status == states.FAILURE:
-            raise self.result.exception
+            raise self.result
 
     def revoke(self):
         pass