mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-04 00:49:16 +02:00
Views and logic for custom radios
This commit is contained in:
parent
df63252105
commit
e7f0c1b88b
13 changed files with 774 additions and 18 deletions
|
@ -1,8 +1,39 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
from funkwhale_api.music.serializers import TrackSerializerNested
|
||||
from . import models
|
||||
|
||||
from . import filters
|
||||
from . import models
|
||||
from .radios import registry
|
||||
|
||||
|
||||
class FilterSerializer(serializers.Serializer):
|
||||
type = serializers.CharField(source='code')
|
||||
label = serializers.CharField()
|
||||
help_text = serializers.CharField()
|
||||
fields = serializers.ReadOnlyField()
|
||||
|
||||
|
||||
class RadioSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Radio
|
||||
fields = (
|
||||
'id',
|
||||
'is_public',
|
||||
'name',
|
||||
'creation_date',
|
||||
'user',
|
||||
'config',
|
||||
'description')
|
||||
read_only_fields = ('user', 'creation_date')
|
||||
|
||||
def save(self, **kwargs):
|
||||
kwargs['config'] = [
|
||||
filters.registry[f['type']].clean_config(f)
|
||||
for f in self.validated_data['config']
|
||||
]
|
||||
|
||||
return super().save(**kwargs)
|
||||
|
||||
class RadioSessionTrackSerializerCreate(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
@ -21,7 +52,18 @@ class RadioSessionTrackSerializer(serializers.ModelSerializer):
|
|||
class RadioSessionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.RadioSession
|
||||
fields = ('id', 'radio_type', 'related_object_id', 'user', 'creation_date', 'session_key')
|
||||
fields = (
|
||||
'id',
|
||||
'radio_type',
|
||||
'related_object_id',
|
||||
'user',
|
||||
'creation_date',
|
||||
'custom_radio',
|
||||
'session_key')
|
||||
|
||||
def validate(self, data):
|
||||
registry[data['radio_type']]().validate_session(data, **self.context)
|
||||
return data
|
||||
|
||||
def create(self, validated_data):
|
||||
if self.context.get('user'):
|
||||
|
@ -29,7 +71,6 @@ class RadioSessionSerializer(serializers.ModelSerializer):
|
|||
else:
|
||||
validated_data['session_key'] = self.context['session_key']
|
||||
if validated_data.get('related_object_id'):
|
||||
from . import radios
|
||||
radio = radios.registry[validated_data['radio_type']]()
|
||||
radio = registry[validated_data['radio_type']]()
|
||||
validated_data['related_object'] = radio.get_related_object(validated_data['related_object_id'])
|
||||
return super().create(validated_data)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue