mirror of
https://github.com/django/django.git
synced 2025-03-29 02:30:48 +00:00
Ensure return value can't be obtained for failed task
This commit is contained in:
parent
b98708fd33
commit
97fee0a3c0
@ -224,11 +224,13 @@ class TaskResult:
|
||||
If the task didn't succeed, an exception is raised.
|
||||
This is to distinguish against the task returning None.
|
||||
"""
|
||||
if not self.is_finished:
|
||||
if self.status == ResultStatus.SUCCEEDED:
|
||||
return self._return_value
|
||||
elif self.status == ResultStatus.FAILED:
|
||||
raise ValueError("Task failed")
|
||||
else:
|
||||
raise ValueError("Task has not finished yet")
|
||||
|
||||
return self._return_value
|
||||
|
||||
@property
|
||||
def exception_class(self):
|
||||
"""The exception raised by the task function"""
|
||||
|
@ -315,7 +315,8 @@ Return values
|
||||
If your task function returns something, it can be retrieved from the
|
||||
:attr:`django.tasks.TaskResult.return_value` attribute::
|
||||
|
||||
result.return_value # 42
|
||||
if result.status == ResultStatus.SUCCEEDED:
|
||||
result.return_value # 42
|
||||
|
||||
If the task has not finished executing, or has failed, :exc:`ValueError` is raised.
|
||||
|
||||
|
@ -82,6 +82,8 @@ class ImmediateBackendTestCase(SimpleTestCase):
|
||||
|
||||
# assert result
|
||||
self.assertEqual(result.status, ResultStatus.FAILED)
|
||||
with self.assertRaisesMessage(ValueError, "Task failed"):
|
||||
result.return_value
|
||||
self.assertTrue(result.is_finished)
|
||||
self.assertIsNotNone(result.started_at)
|
||||
self.assertIsNotNone(result.finished_at)
|
||||
@ -111,6 +113,8 @@ class ImmediateBackendTestCase(SimpleTestCase):
|
||||
result = test_tasks.complex_exception.enqueue()
|
||||
|
||||
self.assertEqual(result.status, ResultStatus.FAILED)
|
||||
with self.assertRaisesMessage(ValueError, "Task failed"):
|
||||
result.return_value
|
||||
self.assertIsNotNone(result.started_at)
|
||||
self.assertIsNotNone(result.finished_at)
|
||||
self.assertGreaterEqual(result.started_at, result.enqueued_at)
|
||||
|
Loading…
x
Reference in New Issue
Block a user