Skip to content

Commit

Permalink
support rq queues default_result_ttl
Browse files Browse the repository at this point in the history
  • Loading branch information
Sir-heed committed Feb 5, 2025
1 parent bb57d41 commit 00cb2c6
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 6 deletions.
1 change: 1 addition & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ Installation
'USERNAME': 'some-user',
'PASSWORD': 'some-password',
'DEFAULT_TIMEOUT': 360,
'DEFAULT_RESULT_TTL': 800,
'REDIS_CLIENT_KWARGS': { # Eventual additional Redis connection arguments
'ssl_cert_reqs': None,
},
Expand Down
5 changes: 5 additions & 0 deletions django_rq/queues.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ def __init__(self, *args, **kwargs):
super(DjangoRQ, self).__init__(*args, **kwargs)

def original_enqueue_call(self, *args, **kwargs):
from .settings import QUEUES

queue_name = kwargs.get('queue_name') or self.name
kwargs['result_ttl'] = QUEUES[queue_name].get('DEFAULT_RESULT_TTL')

return super(DjangoRQ, self).enqueue_call(*args, **kwargs)

def enqueue_call(self, *args, **kwargs):
Expand Down
9 changes: 8 additions & 1 deletion django_rq/tests/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,13 @@


RQ_QUEUES = {
'default': {'HOST': REDIS_HOST, 'PORT': 6379, 'DB': 0, 'DEFAULT_TIMEOUT': 500},
'default': {
'HOST': REDIS_HOST,
'PORT': 6379,
'DB': 0,
'DEFAULT_TIMEOUT': 500,
'DEFAULT_RESULT_TTL': 500,
},
'test': {
'HOST': REDIS_HOST,
'PORT': 1,
Expand Down Expand Up @@ -120,6 +126,7 @@
'HOST': REDIS_HOST,
'PORT': 6379,
'DB': 1,
'DEFAULT_RESULT_TTL': 800,
},
'async': {
'HOST': REDIS_HOST,
Expand Down
4 changes: 2 additions & 2 deletions django_rq/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,8 +265,8 @@ def test_scheduled_jobs(self):
response = self.client.get(reverse('rq_scheduled_jobs', args=[queue_index]))
self.assertEqual(response.context['jobs'], [job])

# Test that page doesn't crash when job_id has special characters
queue.enqueue_at(datetime.now(), access_self, job_id="job-!@#$%^&*()_=+[]{};':,.<>?|`~")
# Test that page doesn't crash when job_id has special characters (exclude :)
queue.enqueue_at(datetime.now(), access_self, job_id="job-!@#$%^&*()_=+[]{};',.<>?|`~")
response = self.client.get(reverse('rq_scheduled_jobs', args=[queue_index]))
self.assertEqual(response.status_code, 200)

Expand Down
18 changes: 15 additions & 3 deletions django_rq/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,18 @@ def test_get_queue_serializer(self):
self.assertEqual(queue.name, 'test_serializer')
self.assertEqual(queue.serializer, rq.serializers.JSONSerializer)

def test_enqueue_default_result_ttl(self):
"""Ensure DEFAULT_RESULT_TTL are properly parsed."""
queue = get_queue()
job = queue.enqueue(divide, 1, 1)
self.assertEqual(job.result_ttl, 500)
job.delete()

queue = get_queue('test3')
job = queue.enqueue(divide, 1, 1)
self.assertEqual(job.result_ttl, 800)
job.delete()


@override_settings(RQ={'AUTOCOMMIT': True})
class DecoratorTest(TestCase):
Expand Down Expand Up @@ -518,14 +530,14 @@ def test():
self.assertEqual(result.result_ttl, DEFAULT_RESULT_TTL)
result.delete()

@override_settings(RQ={'AUTOCOMMIT': True, 'DEFAULT_RESULT_TTL': 5432})
@override_settings(RQ={'AUTOCOMMIT': True})
def test_job_decorator_result_ttl(self):
@job
def test():
pass

result = test.delay()
self.assertEqual(result.result_ttl, 5432)
self.assertEqual(result.result_ttl, 500, msg='value added in RQ_QUEUES default')
result.delete()

@override_settings(RQ={'AUTOCOMMIT': True, 'DEFAULT_RESULT_TTL': 0})
Expand All @@ -535,7 +547,7 @@ def test():
pass

result = test.delay()
self.assertEqual(result.result_ttl, 0)
self.assertEqual(result.result_ttl, 500, msg='value added in RQ_QUEUES default')
result.delete()


Expand Down

0 comments on commit 00cb2c6

Please sign in to comment.