streamer as separate application; working streamer monitor interface

This commit is contained in:
bkfox
2019-09-21 17:14:40 +02:00
parent 4e61ec1520
commit d3f39c5ade
39 changed files with 1347 additions and 148 deletions

View File

@ -1,24 +1,35 @@
from django.urls import reverse
from rest_framework import serializers
from .controllers import QueueSource, PlaylistSource
__all__ = ['RequestSerializer', 'StreamerSerializer', 'SourceSerializer',
'PlaylistSerializer', 'QueueSourceSerializer']
# TODO: use models' serializers
class BaseMetadataSerializer(serializers.Serializer):
class BaseSerializer(serializers.Serializer):
url_ = serializers.SerializerMethodField('get_url')
url_name = None
def get_url(self, obj, **kwargs):
if not obj or not self.url_name:
return
kwargs.setdefault('pk', getattr(obj, 'id', None))
return reverse(self.url_name, kwargs=kwargs)
class BaseMetadataSerializer(BaseSerializer):
rid = serializers.IntegerField()
air_time = serializers.DateTimeField()
uri = serializers.CharField()
class RequestSerializer(serializers.Serializer):
title = serializers.CharField()
artist = serializers.CharField()
class StreamerSerializer(serializers.Serializer):
station = serializers.CharField(source='station.title')
class RequestSerializer(BaseMetadataSerializer):
title = serializers.CharField(required=False)
artist = serializers.CharField(required=False)
class SourceSerializer(BaseMetadataSerializer):
@ -27,14 +38,34 @@ class SourceSerializer(BaseMetadataSerializer):
rid = serializers.IntegerField()
air_time = serializers.DateTimeField()
status = serializers.CharField()
remaining = serializers.FloatField()
def get_url(self, obj, **kwargs):
kwargs['station_pk'] = obj.station.pk
return super().get_url(obj, **kwargs)
class PlaylistSerializer(SourceSerializer):
program = serializers.CharField(source='program.title')
playlist = serializers.ListField(child=serializers.CharField())
url_name = 'admin:api:streamer-playlist-detail'
class QueueSourceSerializer(SourceSerializer):
queue = serializers.ListField(child=RequestSerializer())
queue = serializers.ListField(child=RequestSerializer(), source='requests')
url_name = 'admin:api:streamer-queue-detail'
class StreamerSerializer(BaseSerializer):
id = serializers.IntegerField(source='station.pk')
name = serializers.CharField(source='station.name')
source = serializers.CharField(source='source.id', required=False)
playlists = serializers.ListField(child=PlaylistSerializer())
queues = serializers.ListField(child=QueueSourceSerializer())
url_name = 'admin:api:streamer-detail'
def get_url(self, obj, **kwargs):
kwargs['pk'] = obj.station.pk
return super().get_url(obj, **kwargs)