forked from rc/aircox
- various __all__
- serializer: track search, reorder module files - autocomplete: allow simple string value selection - playlist editor: - ui & flow improve - init data - save user settings - autocomplete - fix bugs - discard changes
This commit is contained in:
3
aircox/serializers/__init__.py
Normal file
3
aircox/serializers/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from .log import *
|
||||
from .sound import *
|
||||
from .admin import *
|
30
aircox/serializers/admin.py
Normal file
30
aircox/serializers/admin.py
Normal file
@ -0,0 +1,30 @@
|
||||
from rest_framework import serializers
|
||||
from taggit.serializers import TagListSerializerField, TaggitSerializer
|
||||
|
||||
from ..models import Track, UserSettings
|
||||
|
||||
|
||||
__all__ = ('TrackSerializer', 'UserSettingsSerializer')
|
||||
|
||||
|
||||
class TrackSerializer(TaggitSerializer, serializers.ModelSerializer):
|
||||
tags = TagListSerializerField()
|
||||
|
||||
class Meta:
|
||||
model = Track
|
||||
fields = ('pk', 'artist', 'title', 'album', 'year', 'position',
|
||||
'info', 'tags', 'episode', 'sound')
|
||||
|
||||
|
||||
class UserSettingsSerializer(serializers.ModelSerializer):
|
||||
# TODO: validate fields values (playlist_editor_columns at least)
|
||||
class Meta:
|
||||
model = UserSettings
|
||||
fields = ('playlist_editor_columns', 'playlist_editor_sep')
|
||||
|
||||
def create(self, validated_data):
|
||||
user = self.context.get('user')
|
||||
if user:
|
||||
validated_data['user_id'] = user.id
|
||||
return super().create(validated_data)
|
||||
|
53
aircox/serializers/log.py
Normal file
53
aircox/serializers/log.py
Normal file
@ -0,0 +1,53 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from ..models import Diffusion, Log
|
||||
|
||||
|
||||
__all__ = ('LogInfo', 'LogInfoSerializer')
|
||||
|
||||
|
||||
class LogInfo:
|
||||
obj = None
|
||||
start, end = None, None
|
||||
title, artist = '', ''
|
||||
url, cover = None, None
|
||||
info = None
|
||||
|
||||
def __init__(self, obj):
|
||||
self.obj = obj
|
||||
if isinstance(obj, Diffusion):
|
||||
self.from_diffusion(obj)
|
||||
elif isinstance(obj, Log):
|
||||
self.from_log(obj)
|
||||
else:
|
||||
raise ValueError('`obj` must be a Diffusion or a Track Log.')
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
return 'track' if isinstance(self.obj, Log) else 'diffusion'
|
||||
|
||||
def from_diffusion(self, obj):
|
||||
episode = obj.episode
|
||||
self.start, self.end = obj.start, obj.end
|
||||
self.title, self.url = episode.title, episode.get_absolute_url()
|
||||
self.cover = episode.cover and episode.cover.icons['64']
|
||||
self.info = episode.category and episode.category.title
|
||||
self.obj = obj
|
||||
|
||||
def from_log(self, obj):
|
||||
track = obj.track
|
||||
self.start = obj.date
|
||||
self.title, self.artist = track.title, track.artist
|
||||
self.info = track.info
|
||||
self.obj = obj
|
||||
|
||||
|
||||
class LogInfoSerializer(serializers.Serializer):
|
||||
type = serializers.CharField(max_length=10)
|
||||
start = serializers.DateTimeField()
|
||||
end = serializers.DateTimeField(required=False)
|
||||
title = serializers.CharField(max_length=200)
|
||||
artist = serializers.CharField(max_length=200, required=False)
|
||||
info = serializers.CharField(max_length=200, required=False)
|
||||
url = serializers.URLField(required=False)
|
||||
cover = serializers.URLField(required=False)
|
21
aircox/serializers/sound.py
Normal file
21
aircox/serializers/sound.py
Normal file
@ -0,0 +1,21 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from ..models import Sound
|
||||
|
||||
|
||||
class SoundSerializer(serializers.ModelSerializer):
|
||||
file = serializers.FileField(use_url=False)
|
||||
|
||||
class Meta:
|
||||
model = Sound
|
||||
fields = ['pk', 'name', 'program', 'episode', 'type', 'file',
|
||||
'duration', 'mtime', 'is_good_quality', 'is_public', 'url']
|
||||
|
||||
|
||||
class PodcastSerializer(serializers.ModelSerializer):
|
||||
# serializers.HyperlinkedIdentityField(view_name='sound', format='html')
|
||||
|
||||
class Meta:
|
||||
model = Sound
|
||||
fields = ['pk', 'name', 'program', 'episode', 'type',
|
||||
'duration', 'mtime', 'url', 'is_downloadable']
|
Reference in New Issue
Block a user