aircox/aircox_streamer/serializers.py
Chris Tactic 55123c386d #132 | #121: backoffice / dev-1.0-121 (#131)
cfr #121

Co-authored-by: Christophe Siraut <d@tobald.eu.org>
Co-authored-by: bkfox <thomas bkfox net>
Co-authored-by: Thomas Kairos <thomas@bkfox.net>
Reviewed-on: #131
Co-authored-by: Chris Tactic <ctactic@noreply.git.radiocampus.be>
Co-committed-by: Chris Tactic <ctactic@noreply.git.radiocampus.be>
2024-04-28 22:02:09 +02:00

77 lines
2.2 KiB
Python

from django.urls import reverse
from rest_framework import serializers
__all__ = [
"RequestSerializer",
"StreamerSerializer",
"SourceSerializer",
"PlaylistSerializer",
"QueueSourceSerializer",
]
# TODO: use models' serializers
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 MetadataSerializer(BaseSerializer):
rid = serializers.IntegerField()
air_time = serializers.DateTimeField()
uri = serializers.CharField()
class RequestSerializer(MetadataSerializer):
title = serializers.CharField(required=False)
artist = serializers.CharField(required=False)
class SourceSerializer(MetadataSerializer):
id = serializers.CharField()
uri = serializers.CharField()
rid = serializers.IntegerField()
air_time = serializers.DateTimeField()
status = serializers.CharField()
status_verbose = serializers.CharField()
remaining = serializers.FloatField()
def get_url(self, obj, **kwargs):
kwargs["station_pk"] = obj.station.pk
return super().get_url(obj, **kwargs)
def get_status_verbose(self, obj, **kwargs):
return obj.status_verbose
class PlaylistSerializer(SourceSerializer):
program = serializers.CharField(source="program.id")
url_name = "streamer:api:streamer-playlist-detail"
class QueueSourceSerializer(SourceSerializer):
queue = serializers.ListField(child=RequestSerializer(), source="requests")
url_name = "streamer: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 = "streamer:api:streamer-detail"
def get_url(self, obj, **kwargs):
kwargs["pk"] = obj.station.pk
return super().get_url(obj, **kwargs)