From 00cb2c677fe78af5ad9a91b91436bb80bbeb049b Mon Sep 17 00:00:00 2001 From: Sir-heed Date: Wed, 5 Feb 2025 16:28:35 +0100 Subject: [PATCH] support rq queues default_result_ttl --- README.rst | 1 + django_rq/queues.py | 5 +++++ django_rq/tests/settings.py | 9 ++++++++- django_rq/tests/test_views.py | 4 ++-- django_rq/tests/tests.py | 18 +++++++++++++++--- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index 72f0cdeb..12b379a7 100644 --- a/README.rst +++ b/README.rst @@ -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, }, diff --git a/django_rq/queues.py b/django_rq/queues.py index a4fca861..618ecf3f 100644 --- a/django_rq/queues.py +++ b/django_rq/queues.py @@ -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): diff --git a/django_rq/tests/settings.py b/django_rq/tests/settings.py index 45ce2bd5..8336d8cf 100644 --- a/django_rq/tests/settings.py +++ b/django_rq/tests/settings.py @@ -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, @@ -120,6 +126,7 @@ 'HOST': REDIS_HOST, 'PORT': 6379, 'DB': 1, + 'DEFAULT_RESULT_TTL': 800, }, 'async': { 'HOST': REDIS_HOST, diff --git a/django_rq/tests/test_views.py b/django_rq/tests/test_views.py index d8473b16..4b8b6997 100644 --- a/django_rq/tests/test_views.py +++ b/django_rq/tests/test_views.py @@ -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) diff --git a/django_rq/tests/tests.py b/django_rq/tests/tests.py index 9c299db6..1de857f4 100644 --- a/django_rq/tests/tests.py +++ b/django_rq/tests/tests.py @@ -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): @@ -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}) @@ -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()