sintonia/api/libretime_api/views.py

310 lines
9.3 KiB
Python
Raw Normal View History

2020-01-30 14:47:36 +01:00
import os
2020-01-30 14:47:36 +01:00
from django.conf import settings
from django.db.models import F
2020-01-30 14:47:36 +01:00
from django.http import FileResponse
from django.shortcuts import get_object_or_404
2021-10-16 20:34:03 +02:00
from drf_spectacular.utils import OpenApiParameter, extend_schema, extend_schema_view
from rest_framework import fields, status, viewsets
from rest_framework.decorators import action, api_view, permission_classes
2020-01-30 14:47:36 +01:00
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
2020-01-30 14:47:36 +01:00
from .permissions import IsAdminOrOwnUser
from .serializers import *
2020-01-30 14:47:36 +01:00
2021-10-16 20:34:03 +02:00
FILTER_NUMERICAL_LOOKUPS = [
"exact",
"gt",
"lt",
"gte",
"lte",
"range",
]
2021-05-27 16:23:02 +02:00
2020-01-30 14:47:36 +01:00
class UserViewSet(viewsets.ModelViewSet):
queryset = get_user_model().objects.all()
serializer_class = UserSerializer
permission_classes = [IsAdminOrOwnUser]
2021-05-27 16:23:02 +02:00
model_permission_name = "user"
2020-01-30 14:47:36 +01:00
class SmartBlockViewSet(viewsets.ModelViewSet):
queryset = SmartBlock.objects.all()
serializer_class = SmartBlockSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "smartblock"
2020-01-30 14:47:36 +01:00
class SmartBlockContentViewSet(viewsets.ModelViewSet):
queryset = SmartBlockContent.objects.all()
serializer_class = SmartBlockContentSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "smartblockcontent"
2020-01-30 14:47:36 +01:00
class SmartBlockCriteriaViewSet(viewsets.ModelViewSet):
queryset = SmartBlockCriteria.objects.all()
serializer_class = SmartBlockCriteriaSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "smartblockcriteria"
2020-01-30 14:47:36 +01:00
class CountryViewSet(viewsets.ModelViewSet):
queryset = Country.objects.all()
serializer_class = CountrySerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "country"
2020-01-30 14:47:36 +01:00
class FileViewSet(viewsets.ModelViewSet):
queryset = File.objects.all()
serializer_class = FileSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "file"
2020-01-30 14:47:36 +01:00
2021-05-27 16:23:02 +02:00
@action(detail=True, methods=["GET"])
2020-01-30 14:47:36 +01:00
def download(self, request, pk=None):
if pk is None:
2021-05-27 16:23:02 +02:00
return Response("No file requested", status=status.HTTP_400_BAD_REQUEST)
2020-01-30 14:47:36 +01:00
try:
pk = int(pk)
except ValueError:
2021-05-27 16:23:02 +02:00
return Response(
"File ID should be an integer", status=status.HTTP_400_BAD_REQUEST
)
2020-01-30 14:47:36 +01:00
filename = get_object_or_404(File, pk=pk)
directory = filename.directory
path = os.path.join(directory.directory, filename.filepath)
2021-05-27 16:23:02 +02:00
response = FileResponse(open(path, "rb"), content_type=filename.mime)
2020-01-30 14:47:36 +01:00
return response
2021-05-27 16:23:02 +02:00
2020-01-30 14:47:36 +01:00
class ListenerCountViewSet(viewsets.ModelViewSet):
queryset = ListenerCount.objects.all()
serializer_class = ListenerCountSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "listenercount"
2020-01-30 14:47:36 +01:00
class LiveLogViewSet(viewsets.ModelViewSet):
queryset = LiveLog.objects.all()
serializer_class = LiveLogSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "livelog"
2020-01-30 14:47:36 +01:00
class LoginAttemptViewSet(viewsets.ModelViewSet):
queryset = LoginAttempt.objects.all()
serializer_class = LoginAttemptSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "loginattempt"
2020-01-30 14:47:36 +01:00
class MountNameViewSet(viewsets.ModelViewSet):
queryset = MountName.objects.all()
serializer_class = MountNameSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "mountname"
2020-01-30 14:47:36 +01:00
class MusicDirViewSet(viewsets.ModelViewSet):
queryset = MusicDir.objects.all()
serializer_class = MusicDirSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "musicdir"
2020-01-30 14:47:36 +01:00
class PlaylistViewSet(viewsets.ModelViewSet):
queryset = Playlist.objects.all()
serializer_class = PlaylistSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "playlist"
2020-01-30 14:47:36 +01:00
class PlaylistContentViewSet(viewsets.ModelViewSet):
queryset = PlaylistContent.objects.all()
serializer_class = PlaylistContentSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "playlistcontent"
2020-01-30 14:47:36 +01:00
class PlayoutHistoryViewSet(viewsets.ModelViewSet):
queryset = PlayoutHistory.objects.all()
serializer_class = PlayoutHistorySerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "playouthistory"
2020-01-30 14:47:36 +01:00
class PlayoutHistoryMetadataViewSet(viewsets.ModelViewSet):
queryset = PlayoutHistoryMetadata.objects.all()
serializer_class = PlayoutHistoryMetadataSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "playouthistorymetadata"
2020-01-30 14:47:36 +01:00
class PlayoutHistoryTemplateViewSet(viewsets.ModelViewSet):
queryset = PlayoutHistoryTemplate.objects.all()
serializer_class = PlayoutHistoryTemplateSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "playouthistorytemplate"
2020-01-30 14:47:36 +01:00
class PlayoutHistoryTemplateFieldViewSet(viewsets.ModelViewSet):
queryset = PlayoutHistoryTemplateField.objects.all()
serializer_class = PlayoutHistoryTemplateFieldSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "playouthistorytemplatefield"
2020-01-30 14:47:36 +01:00
class PreferenceViewSet(viewsets.ModelViewSet):
queryset = Preference.objects.all()
serializer_class = PreferenceSerializer
2021-05-27 17:30:00 +02:00
model_permission_name = "preference"
2021-05-27 16:23:02 +02:00
2020-01-30 14:47:36 +01:00
2021-10-16 20:34:03 +02:00
@extend_schema_view(
list=extend_schema(
parameters=[
OpenApiParameter(
name="is_valid",
description="Filter on valid instances",
required=False,
type=bool,
),
]
)
)
2020-01-30 14:47:36 +01:00
class ScheduleViewSet(viewsets.ModelViewSet):
queryset = Schedule.objects.all()
serializer_class = ScheduleSerializer
2021-10-16 20:34:03 +02:00
filter_fields = {
"starts": FILTER_NUMERICAL_LOOKUPS,
"ends": FILTER_NUMERICAL_LOOKUPS,
"playout_status": FILTER_NUMERICAL_LOOKUPS,
"broadcasted": FILTER_NUMERICAL_LOOKUPS,
}
2021-05-27 16:23:02 +02:00
model_permission_name = "schedule"
def get_queryset(self):
filter_valid = self.request.query_params.get("is_valid")
if filter_valid is None:
return self.queryset.all()
2021-09-22 15:27:40 +02:00
filter_valid = filter_valid.strip().lower() in ("true", "yes", "1")
if filter_valid:
return self.queryset.filter(starts__lt=F("instance__ends"))
else:
return self.queryset.filter(starts__gte=F("instance__ends"))
2020-01-30 14:47:36 +01:00
class ServiceRegisterViewSet(viewsets.ModelViewSet):
queryset = ServiceRegister.objects.all()
serializer_class = ServiceRegisterSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "serviceregister"
2020-01-30 14:47:36 +01:00
class SessionViewSet(viewsets.ModelViewSet):
queryset = Session.objects.all()
serializer_class = SessionSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "session"
2020-01-30 14:47:36 +01:00
class ShowViewSet(viewsets.ModelViewSet):
queryset = Show.objects.all()
serializer_class = ShowSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "show"
2020-01-30 14:47:36 +01:00
class ShowDaysViewSet(viewsets.ModelViewSet):
queryset = ShowDays.objects.all()
serializer_class = ShowDaysSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "showdays"
2020-01-30 14:47:36 +01:00
class ShowHostViewSet(viewsets.ModelViewSet):
queryset = ShowHost.objects.all()
serializer_class = ShowHostSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "showhost"
2020-01-30 14:47:36 +01:00
class ShowInstanceViewSet(viewsets.ModelViewSet):
queryset = ShowInstance.objects.all()
serializer_class = ShowInstanceSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "showinstance"
2020-01-30 14:47:36 +01:00
class ShowRebroadcastViewSet(viewsets.ModelViewSet):
queryset = ShowRebroadcast.objects.all()
serializer_class = ShowRebroadcastSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "showrebroadcast"
2020-01-30 14:47:36 +01:00
class StreamSettingViewSet(viewsets.ModelViewSet):
queryset = StreamSetting.objects.all()
serializer_class = StreamSettingSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "streamsetting"
2020-01-30 14:47:36 +01:00
class UserTokenViewSet(viewsets.ModelViewSet):
queryset = UserToken.objects.all()
serializer_class = UserTokenSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "usertoken"
2020-01-30 14:47:36 +01:00
class TimestampViewSet(viewsets.ModelViewSet):
queryset = Timestamp.objects.all()
serializer_class = TimestampSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "timestamp"
2020-01-30 14:47:36 +01:00
class WebstreamViewSet(viewsets.ModelViewSet):
queryset = Webstream.objects.all()
serializer_class = WebstreamSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "webstream"
2020-01-30 14:47:36 +01:00
class WebstreamMetadataViewSet(viewsets.ModelViewSet):
queryset = WebstreamMetadata.objects.all()
serializer_class = WebstreamMetadataSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "webstreametadata"
2020-01-30 14:47:36 +01:00
class CeleryTaskViewSet(viewsets.ModelViewSet):
queryset = CeleryTask.objects.all()
serializer_class = CeleryTaskSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "celerytask"
2020-01-30 14:47:36 +01:00
class CloudFileViewSet(viewsets.ModelViewSet):
queryset = CloudFile.objects.all()
serializer_class = CloudFileSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "cloudfile"
2020-01-30 14:47:36 +01:00
class ImportedPodcastViewSet(viewsets.ModelViewSet):
queryset = ImportedPodcast.objects.all()
serializer_class = ImportedPodcastSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "importedpodcast"
2020-01-30 14:47:36 +01:00
class PodcastViewSet(viewsets.ModelViewSet):
queryset = Podcast.objects.all()
serializer_class = PodcastSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "podcast"
2020-01-30 14:47:36 +01:00
class PodcastEpisodeViewSet(viewsets.ModelViewSet):
queryset = PodcastEpisode.objects.all()
serializer_class = PodcastEpisodeSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "podcastepisode"
2020-01-30 14:47:36 +01:00
class StationPodcastViewSet(viewsets.ModelViewSet):
queryset = StationPodcast.objects.all()
serializer_class = StationPodcastSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "station"
2020-01-30 14:47:36 +01:00
class ThirdPartyTrackReferenceViewSet(viewsets.ModelViewSet):
queryset = ThirdPartyTrackReference.objects.all()
serializer_class = ThirdPartyTrackReferenceSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "thirdpartytrackreference"
2020-01-30 14:47:36 +01:00
class TrackTypeViewSet(viewsets.ModelViewSet):
queryset = TrackType.objects.all()
serializer_class = TrackTypeSerializer
2021-05-27 16:23:02 +02:00
model_permission_name = "tracktype"
2020-01-30 14:47:36 +01:00
2021-05-27 16:23:02 +02:00
@api_view(["GET"])
@permission_classes((AllowAny,))
2020-01-30 14:47:36 +01:00
def version(request, *args, **kwargs):
2021-05-27 16:23:02 +02:00
return Response({"api_version": settings.API_VERSION})