soundwave/backend/audio/serializers_artwork.py

93 lines
2.5 KiB
Python
Raw Normal View History

"""Serializers for artwork and metadata"""
from rest_framework import serializers
from audio.models_artwork import Artwork, MusicMetadata, ArtistInfo
class ArtworkSerializer(serializers.ModelSerializer):
"""Serializer for Artwork model"""
class Meta:
model = Artwork
fields = [
'id',
'audio',
'channel',
'artwork_type',
'source',
'url',
'local_path',
'width',
'height',
'priority',
'is_primary',
'created_at',
]
read_only_fields = ['id', 'created_at']
class MusicMetadataSerializer(serializers.ModelSerializer):
"""Serializer for MusicMetadata model"""
class Meta:
model = MusicMetadata
fields = [
'id',
'audio',
'album_name',
'album_artist',
'release_year',
'track_number',
'disc_number',
'genre',
'tags',
'lastfm_url',
'lastfm_mbid',
'play_count',
'listeners',
'fanart_artist_id',
'fanart_album_id',
'created_at',
'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at']
class ArtistInfoSerializer(serializers.ModelSerializer):
"""Serializer for ArtistInfo model"""
class Meta:
model = ArtistInfo
fields = [
'id',
'channel',
'bio',
'bio_summary',
'lastfm_url',
'lastfm_mbid',
'lastfm_listeners',
'lastfm_playcount',
'tags',
'fanart_id',
'similar_artists',
'created_at',
'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at']
class AudioWithArtworkSerializer(serializers.Serializer):
"""Serializer for audio with artwork"""
audio_id = serializers.IntegerField()
audio_title = serializers.CharField()
artist = serializers.CharField()
artwork = ArtworkSerializer(many=True)
metadata = MusicMetadataSerializer(required=False)
class ChannelWithArtworkSerializer(serializers.Serializer):
"""Serializer for channel with artwork"""
channel_id = serializers.IntegerField()
channel_name = serializers.CharField()
artwork = ArtworkSerializer(many=True)
artist_info = ArtistInfoSerializer(required=False)