summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartłomiej Biernacki <pax0r@users.noreply.github.com>2019-09-08 13:04:43 +0200
committerSelwin Ong <selwin.ong@gmail.com>2019-09-08 18:04:43 +0700
commit51efc203713958e1f0a0ae774c9e752a1998a7d6 (patch)
tree98bc26b0fdc9ab0f63168d091de1189233344c0c
parent0a669f1f33b7e4f64ba7b40264e7eccf3eccd455 (diff)
downloadrq-51efc203713958e1f0a0ae774c9e752a1998a7d6.tar.gz
Add failure_ttl on job decorator (#1130)
Without it you cannot specify custom timeout for failed jobs created using decorator
-rw-r--r--rq/decorators.py5
-rw-r--r--tests/test_decorator.py14
2 files changed, 17 insertions, 2 deletions
diff --git a/rq/decorators.py b/rq/decorators.py
index ab28bd4..a84289f 100644
--- a/rq/decorators.py
+++ b/rq/decorators.py
@@ -17,7 +17,7 @@ class job(object): # noqa
def __init__(self, queue, connection=None, timeout=None,
result_ttl=DEFAULT_RESULT_TTL, ttl=None,
queue_class=None, depends_on=None, at_front=None, meta=None,
- description=None):
+ description=None, failure_ttl=None):
"""A decorator that adds a ``delay`` method to the decorated function,
which in turn creates a RQ job when called. Accepts a required
``queue`` argument that can be either a ``Queue`` instance or a string
@@ -39,6 +39,7 @@ class job(object): # noqa
self.depends_on = depends_on
self.at_front = at_front
self.description = description
+ self.failure_ttl = failure_ttl
def __call__(self, f):
@wraps(f)
@@ -61,6 +62,6 @@ class job(object): # noqa
return queue.enqueue_call(f, args=args, kwargs=kwargs,
timeout=self.timeout, result_ttl=self.result_ttl,
ttl=self.ttl, depends_on=depends_on, at_front=at_front,
- meta=self.meta, description=self.description)
+ meta=self.meta, description=self.description, failure_ttl=self.failure_ttl)
f.delay = delay
return f
diff --git a/tests/test_decorator.py b/tests/test_decorator.py
index 5f74935..5b7f38e 100644
--- a/tests/test_decorator.py
+++ b/tests/test_decorator.py
@@ -203,3 +203,17 @@ class TestDecorator(RQTestCase):
custom_queue_job.delay(1, 2)
self.assertEqual(queue.enqueue_call.call_count, 1)
+
+ def test_decorator_custom_failure_ttl(self):
+ """Ensure that passing in failure_ttl to the decorator sets the
+ failure_ttl on the job
+ """
+ # Ensure default
+ result = decorated_job.delay(1, 2)
+ self.assertEqual(result.failure_ttl, None)
+
+ @job('default', failure_ttl=10)
+ def hello():
+ return 'Why hello'
+ result = hello.delay()
+ self.assertEqual(result.failure_ttl, 10)