diff --git a/rq/job.py b/rq/job.py index cbdf7f4..ebccb13 100644 --- a/rq/job.py +++ b/rq/job.py @@ -417,6 +417,7 @@ class Job(object): self.result_ttl = int(obj.get('result_ttl')) if obj.get('result_ttl') else None # noqa self._status = as_text(obj.get('status') if obj.get('status') else None) self._dependency_id = as_text(obj.get('dependency_id', None)) + self.ttl = int(obj.get('ttl')) if obj.get('ttl') else None self.meta = unpickle(obj.get('meta')) if obj.get('meta') else {} def to_dict(self): @@ -447,6 +448,8 @@ class Job(object): obj['dependency_id'] = self._dependency_id if self.meta: obj['meta'] = dumps(self.meta) + if self.ttl: + obj['ttl'] = self.ttl return obj @@ -456,7 +459,7 @@ class Job(object): connection = pipeline if pipeline is not None else self.connection connection.hmset(key, self.to_dict()) - self.cleanup(self.ttl) + self.cleanup(self.ttl, pipeline=connection) def cancel(self): """Cancels the given job, which will prevent the job from ever being diff --git a/tests/test_job.py b/tests/test_job.py index 36570cf..a078ce6 100644 --- a/tests/test_job.py +++ b/tests/test_job.py @@ -3,6 +3,7 @@ from __future__ import (absolute_import, division, print_function, unicode_literals) from datetime import datetime +import time from tests import RQTestCase from tests.helpers import strip_microseconds @@ -406,4 +407,18 @@ class TestJob(RQTestCase): job = queue.enqueue(fixtures.echo, arg_with_unicode=fixtures.UnicodeStringObject()) self.assertIsNotNone(job.get_call_string()) - job.perform() \ No newline at end of file + job.perform() + + def test_create_job_with_ttl_should_have_ttl_after_enqueued(self): + """test creating jobs with ttl and checks if get_jobs returns it properly [issue502]""" + queue = Queue(connection=self.testconn) + queue.enqueue(fixtures.say_hello, job_id="1234", ttl=10) + job = queue.get_jobs()[0] + self.assertEqual(job.ttl, 10) + + def test_create_job_with_ttl_should_expire(self): + """test if a job created with ttl expires [issue502]""" + queue = Queue(connection=self.testconn) + queue.enqueue(fixtures.say_hello, job_id="1234", ttl=1) + time.sleep(1) + self.assertEqual(0, len(queue.get_jobs()))