105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
from rest_framework import serializers
|
|
from taggit.models import Tag
|
|
|
|
from . import models
|
|
|
|
|
|
class TagSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Tag
|
|
fields = ('id', 'name', 'slug')
|
|
|
|
class SimpleArtistSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = models.Artist
|
|
fields = ('id', 'mbid', 'name')
|
|
|
|
class ArtistSerializer(serializers.ModelSerializer):
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = models.Artist
|
|
fields = ('id', 'mbid', 'name', 'tags')
|
|
|
|
class ImportJobSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = models.ImportJob
|
|
fields = ('id', 'mbid', 'source', 'status')
|
|
|
|
class ImportBatchSerializer(serializers.ModelSerializer):
|
|
jobs = ImportJobSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = models.ImportBatch
|
|
fields = ('id', 'jobs', 'status', 'creation_date')
|
|
|
|
class TrackFileSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = models.TrackFile
|
|
fields = ('id', 'path', 'duration', 'source', 'filename')
|
|
|
|
|
|
class SimpleAlbumSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
model = models.Album
|
|
fields = ('id', 'mbid', 'title', 'release_date', 'cover')
|
|
|
|
class AlbumSerializer(serializers.ModelSerializer):
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = models.Album
|
|
fields = ('id', 'mbid', 'title', 'cover', 'release_date', 'tags')
|
|
|
|
|
|
class LyricsMixin(serializers.ModelSerializer):
|
|
lyrics = serializers.SerializerMethodField()
|
|
|
|
def get_lyrics(self, obj):
|
|
return obj.get_lyrics_url()
|
|
|
|
|
|
class TrackSerializer(LyricsMixin):
|
|
files = TrackFileSerializer(many=True, read_only=True)
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = models.Track
|
|
fields = (
|
|
'id',
|
|
'mbid',
|
|
'title',
|
|
'artist',
|
|
'files',
|
|
'tags',
|
|
'position',
|
|
'lyrics')
|
|
|
|
class TrackSerializerNested(LyricsMixin):
|
|
artist = ArtistSerializer()
|
|
files = TrackFileSerializer(many=True, read_only=True)
|
|
album = SimpleAlbumSerializer(read_only=True)
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = models.Track
|
|
fields = ('id', 'mbid', 'title', 'artist', 'files', 'album', 'tags', 'lyrics')
|
|
|
|
class AlbumSerializerNested(serializers.ModelSerializer):
|
|
tracks = TrackSerializer(many=True, read_only=True)
|
|
artist = SimpleArtistSerializer()
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = models.Album
|
|
fields = ('id', 'mbid', 'title', 'cover', 'artist', 'release_date', 'tracks', 'tags')
|
|
|
|
class ArtistSerializerNested(serializers.ModelSerializer):
|
|
albums = AlbumSerializerNested(many=True, read_only=True)
|
|
tags = TagSerializer(many=True, read_only=True)
|
|
class Meta:
|
|
model = models.Artist
|
|
fields = ('id', 'mbid', 'name', 'albums', 'tags')
|
|
|
|
|
|
class LyricsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = models.Lyrics
|
|
fields = ('id', 'work', 'content', 'content_rendered')
|