mirror of
https://git.vectorsigma.ru/public/tubearchivist.git
synced 2026-08-04 21:59:33 +00:00
serialize tasks
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
"""serializer for tasks"""
|
||||
|
||||
# pylint: disable=abstract-method
|
||||
|
||||
from rest_framework import serializers
|
||||
from task.models import CustomPeriodicTask
|
||||
from task.src.task_config import TASK_CONFIG
|
||||
|
||||
|
||||
class CustomPeriodicTaskSerializer(serializers.ModelSerializer):
|
||||
@@ -21,3 +24,70 @@ class CustomPeriodicTaskSerializer(serializers.ModelSerializer):
|
||||
"last_run_at",
|
||||
"config",
|
||||
]
|
||||
|
||||
|
||||
class TaskResultSerializer(serializers.Serializer):
|
||||
"""serialize task result stored in redis"""
|
||||
|
||||
status = serializers.ChoiceField(
|
||||
choices=[
|
||||
"PENDING",
|
||||
"STARTED",
|
||||
"SUCCESS",
|
||||
"FAILURE",
|
||||
"RETRY",
|
||||
"REVOKED",
|
||||
]
|
||||
)
|
||||
result = serializers.CharField(allow_null=True)
|
||||
traceback = serializers.CharField(allow_null=True)
|
||||
date_done = serializers.CharField()
|
||||
name = serializers.CharField()
|
||||
args = serializers.ListField(child=serializers.JSONField(), required=False)
|
||||
children = serializers.ListField(
|
||||
child=serializers.CharField(), required=False
|
||||
)
|
||||
kwargs = serializers.DictField(required=False)
|
||||
worker = serializers.CharField(required=False)
|
||||
retries = serializers.IntegerField(required=False)
|
||||
queue = serializers.CharField(required=False)
|
||||
task_id = serializers.CharField()
|
||||
|
||||
|
||||
class TaskIDDataSerializer(serializers.Serializer):
|
||||
"""serialize task by ID POST data"""
|
||||
|
||||
command = serializers.ChoiceField(choices=["stop", "kill"])
|
||||
|
||||
|
||||
class TaskCreateDataSerializer(serializers.Serializer):
|
||||
"""serialize task create data"""
|
||||
|
||||
schedule = serializers.CharField(required=False)
|
||||
config = serializers.DictField(required=False)
|
||||
|
||||
|
||||
class TaskNotificationItemSerializer(serializers.Serializer):
|
||||
"""serialize single task notification"""
|
||||
|
||||
urls = serializers.ListField(child=serializers.CharField())
|
||||
title = serializers.CharField()
|
||||
|
||||
|
||||
def create_dynamic_notification_serializer():
|
||||
"""use task config"""
|
||||
fields = {
|
||||
key: TaskNotificationItemSerializer(required=False)
|
||||
for key in TASK_CONFIG
|
||||
}
|
||||
return type("DynamicDictSerializer", (serializers.Serializer,), fields)
|
||||
|
||||
|
||||
TaskNotificationSerializer = create_dynamic_notification_serializer()
|
||||
|
||||
|
||||
class TaskNotificationPostSerializer(serializers.Serializer):
|
||||
"""serialize task notification POST"""
|
||||
|
||||
task_name = serializers.ChoiceField(choices=list(TASK_CONFIG))
|
||||
url = serializers.CharField(required=False)
|
||||
|
||||
Reference in New Issue
Block a user