Dispatcharr/core/api_views.py
Dispatcharr 1fb7a0c9eb Alpha v3
Added user agents
Added Stream Profiles
Added new API calls
2025-02-21 15:31:59 -06:00

54 lines
2 KiB
Python

# core/api_views.py
from rest_framework import viewsets, status
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
from .models import UserAgent, StreamProfile, CoreSettings
from .serializers import UserAgentSerializer, StreamProfileSerializer, CoreSettingsSerializer
from rest_framework.permissions import IsAuthenticated
class UserAgentViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows user agents to be viewed, created, edited, or deleted.
"""
queryset = UserAgent.objects.all()
serializer_class = UserAgentSerializer
class StreamProfileViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows stream profiles to be viewed, created, edited, or deleted.
"""
queryset = StreamProfile.objects.all()
serializer_class = StreamProfileSerializer
class CoreSettingsViewSet(viewsets.ModelViewSet):
"""
API endpoint for editing core settings.
This is treated as a singleton: only one instance should exist.
"""
queryset = CoreSettings.objects.all()
serializer_class = CoreSettingsSerializer
permission_classes = [IsAuthenticated]
def create(self, request, *args, **kwargs):
if CoreSettings.objects.exists():
return Response(
{"detail": "Core settings already exist. Use PUT to update."},
status=status.HTTP_400_BAD_REQUEST
)
return super().create(request, *args, **kwargs)
def list(self, request, *args, **kwargs):
# Always return the singleton instance (creating it if needed)
settings_instance, created = CoreSettings.objects.get_or_create(pk=1)
serializer = self.get_serializer(settings_instance)
return Response([serializer.data]) # Return as a list for DRF router compatibility
def retrieve(self, request, *args, **kwargs):
# Retrieve the singleton instance
settings_instance = get_object_or_404(CoreSettings, pk=1)
serializer = self.get_serializer(settings_instance)
return Response(serializer.data)