From 1cef6f0db740bb987cb0756aca7f81074531fd1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Fern=C3=A1ndez=20Poyatos?= Date: Thu, 12 Sep 2024 15:07:08 +0200 Subject: [PATCH] feat(Tasks): PRWLR-4826 add task_args to serializer (#41) --- src/backend/api/v1/serializers.py | 13 +++++++++++++ src/backend/conftest.py | 1 + 2 files changed, 14 insertions(+) diff --git a/src/backend/api/v1/serializers.py b/src/backend/api/v1/serializers.py index c8ab81bb3c..be0d0731f9 100644 --- a/src/backend/api/v1/serializers.py +++ b/src/backend/api/v1/serializers.py @@ -95,6 +95,7 @@ class TaskSerializer(RLSSerializer, TaskBase): state = serializers.SerializerMethodField(read_only=True) metadata = serializers.SerializerMethodField(read_only=True) result = serializers.SerializerMethodField(read_only=True) + task_args = serializers.SerializerMethodField(read_only=True) completed_at = serializers.DateTimeField( source="task_runner_task.date_done", read_only=True @@ -110,6 +111,7 @@ class TaskSerializer(RLSSerializer, TaskBase): "name", "state", "result", + "task_args", "metadata", ] @@ -121,6 +123,17 @@ class TaskSerializer(RLSSerializer, TaskBase): def get_result(self, obj): return self.get_json_field(obj, "result") + @extend_schema_field(serializers.JSONField()) + def get_task_args(self, obj): + task_args = self.get_json_field(obj, "task_kwargs") + # Celery task_kwargs are stored as a double string JSON in the database when not empty + if isinstance(task_args, str): + task_args = json.loads(task_args.replace("'", '"')) + # Remove tenant_id from task_kwargs if present + task_args.pop("tenant_id", None) + + return task_args + @staticmethod def get_json_field(obj, field_name): """Helper method to DRY the logic for loading JSON fields from task_runner_task.""" diff --git a/src/backend/conftest.py b/src/backend/conftest.py index d71a164496..19bc1babf5 100644 --- a/src/backend/conftest.py +++ b/src/backend/conftest.py @@ -131,6 +131,7 @@ def tasks_fixture(tenants_fixture): task_runner_task1 = TaskResult.objects.create( task_id="81a1b34b-ff6e-498e-979c-d6a83260167f", task_name="task_runner_task1", + task_kwargs='{"kwarg1": "value1"}', status="SUCCESS", ) task_runner_task2 = TaskResult.objects.create(