feat(Tasks): PRWLR-4826 add task_args to serializer (#41)

This commit is contained in:
Víctor Fernández Poyatos
2024-09-12 15:07:08 +02:00
committed by GitHub
parent f7645e8f25
commit 1cef6f0db7
2 changed files with 14 additions and 0 deletions
+13
View File
@@ -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."""
+1
View File
@@ -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(