Skip to content

Commit 2e004c6

Browse files
committed
Add support for SingularTaskFailure
1 parent 7009820 commit 2e004c6

3 files changed

Lines changed: 18 additions & 0 deletions

File tree

src/cloud_tasks_deferred/deferred.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,10 @@ class PermanentTaskFailure(Error):
9494
"""Indicates that a task failed, and will never succeed."""
9595

9696

97+
class SingularTaskFailure(Error):
98+
"""Indicates that a task failed once."""
99+
100+
97101
class InvalidTaskError(Error):
98102
"""The parameters, headers, or method of the task is invalid."""
99103

src/cloud_tasks_deferred/wsgi.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ def abort(status):
4343

4444
try:
4545
deferred.run(data)
46+
except deferred.SingularTaskFailure:
47+
logger.debug('Failure executing task, task retry forced')
48+
return abort('408 Request Timeout')
4649
except deferred.PermanentTaskFailure:
4750
logger.exception('Permanent failure attempting to execute task')
4851
except Exception:

tests/test_wsgi.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import pytest
1111
from falcon import testing
1212

13+
from cloud_tasks_deferred import deferred
1314
from cloud_tasks_deferred import wsgi
1415

1516

@@ -52,6 +53,16 @@ def test_application(simulate_post):
5253
assert response.status == falcon.HTTP_NO_CONTENT
5354

5455

56+
def test_application_singular_task_failure(simulate_post, mocker):
57+
mocker.patch(
58+
'cloud_tasks_deferred.deferred.run',
59+
side_effect=deferred.SingularTaskFailure,
60+
)
61+
body = pickle.dumps((bool, (), {}))
62+
response = simulate_post(body=body)
63+
assert response.status == '408 Request Timeout'
64+
65+
5566
def test_application_permanent_task_failure(simulate_post):
5667
body = pickle.dumps('can not deserialize')
5768
response = simulate_post(body=body)

0 commit comments

Comments
 (0)