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
69 lines
2.1 KiB
Python
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",
|
|
]
|