Files
root f56b088643
Base Image Build / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
Proyecto LCX Dispatcharr multicuenta
2026-05-09 21:24:50 +02:00

69 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",
]