mirror of
https://github.com/narrrl/holy-flavor-rater.git
synced 2026-11-03 16:41:27 +01:00
82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
from datetime import timedelta
|
|
|
|
from rest_framework import serializers
|
|
|
|
from api.models import Banner, Job, SystemConfig
|
|
|
|
_INTERVAL_PERIOD_TO_TIMEDELTA = {
|
|
"days": lambda every: timedelta(days=every),
|
|
"hours": lambda every: timedelta(hours=every),
|
|
"minutes": lambda every: timedelta(minutes=every),
|
|
"seconds": lambda every: timedelta(seconds=every),
|
|
}
|
|
|
|
|
|
class SystemConfigSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SystemConfig
|
|
fields = [
|
|
"site_name",
|
|
"maintenance_mode",
|
|
"allow_new_signups",
|
|
"require_email_verification",
|
|
"updated_at",
|
|
]
|
|
|
|
|
|
class JobSerializer(serializers.ModelSerializer):
|
|
name_display = serializers.CharField(source="get_name_display", read_only=True)
|
|
next_run = serializers.SerializerMethodField()
|
|
|
|
def get_next_run(self, obj):
|
|
from django_celery_beat.models import PeriodicTask
|
|
|
|
task = PeriodicTask.objects.filter(name=f"job:{obj.name}", enabled=True).first()
|
|
if not task or not task.interval:
|
|
return None
|
|
base = task.last_run_at or obj.last_run
|
|
if not base:
|
|
return None
|
|
delta_fn = _INTERVAL_PERIOD_TO_TIMEDELTA.get(task.interval.period)
|
|
if not delta_fn:
|
|
return None
|
|
return base + delta_fn(task.interval.every)
|
|
|
|
class Meta:
|
|
model = Job
|
|
fields = [
|
|
"id",
|
|
"name",
|
|
"name_display",
|
|
"status",
|
|
"last_run",
|
|
"next_run",
|
|
"interval_hours",
|
|
"last_output",
|
|
"error_message",
|
|
]
|
|
read_only_fields = [
|
|
"status",
|
|
"last_run",
|
|
"next_run",
|
|
"last_output",
|
|
"error_message",
|
|
]
|
|
|
|
|
|
class BannerSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Banner
|
|
fields = [
|
|
"id",
|
|
"name",
|
|
"slug",
|
|
"description",
|
|
"is_active",
|
|
"is_enabled",
|
|
"settings",
|
|
"schema",
|
|
"created_at",
|
|
"updated_at",
|
|
]
|