Jelajahi Sumber

Handle failures in task_status view such that it won't throw 500s.

Brian Rosner 16 tahun lalu
induk
melakukan
acf4911910
1 mengubah file dengan 14 tambahan dan 6 penghapusan
  1. 14 6
      celery/views.py

+ 14 - 6
celery/views.py

@@ -14,9 +14,17 @@ def is_task_done(request, task_id):
 def task_status(request, task_id):
     """Returns task status and result in JSON format."""
     async_result = AsyncResult(task_id)
-    response_data = {"task": {
-                        "id": task_id,
-                        "status": async_result.status,
-                        "result": async_result.result,
-    }}
-    return HttpResponse(JSON_dump(response_data))
+    status = async_result.status
+    if status == "FAILURE":
+        response_data = {
+            "id": task_id,
+            "status": status,
+            "result": async_result.result.args[0],
+        }
+    else:
+        response_data = {
+            "id": task_id,
+            "status": status,
+            "result": async_result.result,
+        }
+    return HttpResponse(JSON_dump({"task": response_data}))