forked from rc/aircox
streamer as separate application; working streamer monitor interface
This commit is contained in:
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user