From a4798188bc026d2f28aa03126c2e83b7428a9de7 Mon Sep 17 00:00:00 2001 From: Freddy Heppell Date: Mon, 9 Jun 2025 10:48:44 +0100 Subject: [PATCH 1/2] Add support for stamps --- django_celery_results/backends/database.py | 8 +++++- t/unit/backends/test_database.py | 31 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/django_celery_results/backends/database.py b/django_celery_results/backends/database.py index a4e364a6..ef561d58 100644 --- a/django_celery_results/backends/database.py +++ b/django_celery_results/backends/database.py @@ -108,7 +108,13 @@ def _get_meta_from_request(self, request=None): retrieve and stored on the TaskResult. """ request = request or getattr(get_current_task(), "request", None) - return getattr(request, "meta", {}) + meta = getattr(request, "meta", {}) + + if getattr(request, "stamps", None): + meta["stamped_headers"] = request.stamped_headers + meta.update(request.stamps) + + return meta def _store_result( self, diff --git a/t/unit/backends/test_database.py b/t/unit/backends/test_database.py index 8baa6cc0..892373f2 100644 --- a/t/unit/backends/test_database.py +++ b/t/unit/backends/test_database.py @@ -550,6 +550,37 @@ def test_backend__task_result_meta_injection(self): tr = TaskResult.objects.get(task_id=tid2) assert json.loads(tr.meta) == {'key': 'value', 'children': []} + @pytest.mark.skip("Need to find how to inject stamped headers") + def test_backend__task_result_stamped(self): + self.app.conf.result_serializer = 'json' + self.app.conf.accept_content = {'pickle', 'json'} + self.b = DatabaseBackend(app=self.app) + + tid2 = uuid() + + request = self._create_request( + task_id=tid2, + name='my_task', + args=[], + kwargs={}, + task_protocol=1, + ) + result = None + + self.b.mark_as_done(tid2, result, request=request) + mindb = self.b.get_task_meta(tid2) + + # check task meta + assert mindb.get('result') is None + assert mindb.get('task_name') == 'my_task' + + tr = TaskResult.objects.get(task_id=tid2) + assert json.loads(tr.meta) == { + "stamped_headers": ["stamp", "cust_stamp"], + "stamp": "value1", "cust_stamp": "value2", + "children": [] + } + def test_backend__task_result_date(self): tid2 = uuid() From a7c8ce82da9a400c08a6348cc21eb340c4546da6 Mon Sep 17 00:00:00 2001 From: Asif Saif Uddin Date: Mon, 9 Jun 2025 21:58:30 +0600 Subject: [PATCH 2/2] Update django_celery_results/backends/database.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- django_celery_results/backends/database.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/django_celery_results/backends/database.py b/django_celery_results/backends/database.py index ef561d58..219b498c 100644 --- a/django_celery_results/backends/database.py +++ b/django_celery_results/backends/database.py @@ -111,7 +111,8 @@ def _get_meta_from_request(self, request=None): meta = getattr(request, "meta", {}) if getattr(request, "stamps", None): - meta["stamped_headers"] = request.stamped_headers + if hasattr(request, "stamped_headers"): + meta["stamped_headers"] = request.stamped_headers meta.update(request.stamps) return meta