diff options
author | Bartłomiej Biernacki <pax0r@users.noreply.github.com> | 2019-09-08 13:04:43 +0200 |
---|---|---|
committer | Selwin Ong <selwin.ong@gmail.com> | 2019-09-08 18:04:43 +0700 |
commit | 51efc203713958e1f0a0ae774c9e752a1998a7d6 (patch) | |
tree | 98bc26b0fdc9ab0f63168d091de1189233344c0c | |
parent | 0a669f1f33b7e4f64ba7b40264e7eccf3eccd455 (diff) | |
download | rq-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.py | 5 | ||||
-rw-r--r-- | tests/test_decorator.py | 14 |
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) |