funkwhale/api/funkwhale_api/radios/serializers.py

81 wiersze
2.2 KiB
Python
Czysty Zwykły widok Historia

from rest_framework import serializers
from funkwhale_api.music.serializers import TrackSerializer
2018-03-31 11:59:45 +00:00
from funkwhale_api.users.serializers import UserBasicSerializer
2018-01-07 21:13:32 +00:00
from . import filters
from . import models
2018-01-07 21:13:32 +00:00
from .radios import registry
class FilterSerializer(serializers.Serializer):
2018-06-09 13:36:16 +00:00
type = serializers.CharField(source="code")
2018-01-07 21:13:32 +00:00
label = serializers.CharField()
help_text = serializers.CharField()
fields = serializers.ReadOnlyField()
2018-01-07 21:13:32 +00:00
class RadioSerializer(serializers.ModelSerializer):
2018-03-31 11:59:45 +00:00
user = UserBasicSerializer(read_only=True)
2018-01-07 21:13:32 +00:00
class Meta:
model = models.Radio
fields = (
2018-06-09 13:36:16 +00:00
"id",
"is_public",
"name",
"creation_date",
"user",
"config",
"description",
)
read_only_fields = ("user", "creation_date")
2018-01-07 21:13:32 +00:00
def save(self, **kwargs):
2018-06-09 13:36:16 +00:00
kwargs["config"] = [
filters.registry[f["type"]].clean_config(f)
for f in self.validated_data["config"]
2018-01-07 21:13:32 +00:00
]
return super().save(**kwargs)
class RadioSessionTrackSerializerCreate(serializers.ModelSerializer):
class Meta:
model = models.RadioSessionTrack
2018-06-09 13:36:16 +00:00
fields = ("session",)
class RadioSessionTrackSerializer(serializers.ModelSerializer):
track = TrackSerializer()
class Meta:
model = models.RadioSessionTrack
2018-06-09 13:36:16 +00:00
fields = ("id", "session", "position", "track")
class RadioSessionSerializer(serializers.ModelSerializer):
class Meta:
model = models.RadioSession
2018-01-07 21:13:32 +00:00
fields = (
2018-06-09 13:36:16 +00:00
"id",
"radio_type",
"related_object_id",
"user",
"creation_date",
"custom_radio",
)
2018-01-07 21:13:32 +00:00
def validate(self, data):
2018-06-09 13:36:16 +00:00
registry[data["radio_type"]]().validate_session(data, **self.context)
2018-01-07 21:13:32 +00:00
return data
def create(self, validated_data):
2018-06-09 13:36:16 +00:00
validated_data["user"] = self.context["user"]
if validated_data.get("related_object_id"):
radio = registry[validated_data["radio_type"]]()
validated_data["related_object"] = radio.get_related_object(
validated_data["related_object_id"]
)
return super().create(validated_data)