mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-18 17:16:26 +00:00
68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
from rest_framework import serializers
|
|
from .models import Integration, EventSubscription, DeliveryLog
|
|
import os
|
|
|
|
|
|
class EventSubscriptionSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = EventSubscription
|
|
fields = [
|
|
"id",
|
|
"event",
|
|
"enabled",
|
|
"payload_template",
|
|
"integration",
|
|
]
|
|
|
|
|
|
class IntegrationSerializer(serializers.ModelSerializer):
|
|
subscriptions = EventSubscriptionSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = Integration
|
|
fields = [
|
|
"id",
|
|
"name",
|
|
"type",
|
|
"config",
|
|
"enabled",
|
|
"created_at",
|
|
"subscriptions",
|
|
]
|
|
|
|
def validate(self, attrs):
|
|
type = attrs.get("type") if "type" in attrs else getattr(self.instance, "type", None)
|
|
config = attrs.get("config") if "config" in attrs else getattr(self.instance, "config", {})
|
|
|
|
if type == "script":
|
|
path = (config or {}).get("path")
|
|
if not path or not isinstance(path, str):
|
|
raise serializers.ValidationError({"config": "Script config must include a 'path' string"})
|
|
|
|
real_path = os.path.abspath(os.path.realpath(path))
|
|
if not os.path.exists(real_path):
|
|
raise serializers.ValidationError({"config": f"Script path does not exist: {path}"})
|
|
elif type == "webhook":
|
|
url = (config or {}).get("url")
|
|
if not url or not isinstance(url, str):
|
|
raise serializers.ValidationError({"config": "Webhook config must include a 'url' string"})
|
|
else:
|
|
raise serializers.ValidationError({"type": "Unsupported integration type"})
|
|
|
|
return attrs
|
|
|
|
|
|
class DeliveryLogSerializer(serializers.ModelSerializer):
|
|
subscription = EventSubscriptionSerializer(read_only=True)
|
|
|
|
class Meta:
|
|
model = DeliveryLog
|
|
fields = [
|
|
"id",
|
|
"subscription",
|
|
"status",
|
|
"request_payload",
|
|
"response_payload",
|
|
"error_message",
|
|
"created_at",
|
|
]
|