UI To manage artists, albums, tracks

This commit is contained in:
Eliot Berriot 2019-04-17 14:17:59 +02:00
parent ae390e5c1c
commit b4731928fc
39 changed files with 2837 additions and 116 deletions

View file

@ -9,6 +9,7 @@ from funkwhale_api.federation import fields as federation_fields
from funkwhale_api.federation import tasks as federation_tasks
from funkwhale_api.moderation import models as moderation_models
from funkwhale_api.music import models as music_models
from funkwhale_api.music import serializers as music_serializers
from funkwhale_api.users import models as users_models
from . import filters
@ -216,10 +217,7 @@ class ManageDomainActionSerializer(common_serializers.ActionSerializer):
common_utils.on_commit(federation_tasks.purge_actors.delay, domains=list(ids))
class ManageActorSerializer(serializers.ModelSerializer):
uploads_count = serializers.SerializerMethodField()
user = ManageUserSerializer()
class ManageBaseActorSerializer(serializers.ModelSerializer):
class Meta:
model = federation_models.Actor
fields = [
@ -238,6 +236,17 @@ class ManageActorSerializer(serializers.ModelSerializer):
"outbox_url",
"shared_inbox_url",
"manually_approves_followers",
]
read_only_fields = ["creation_date", "instance_policy"]
class ManageActorSerializer(ManageBaseActorSerializer):
uploads_count = serializers.SerializerMethodField()
user = ManageUserSerializer()
class Meta:
model = federation_models.Actor
fields = ManageBaseActorSerializer.Meta.fields + [
"uploads_count",
"user",
"instance_policy",
@ -339,3 +348,148 @@ class ManageInstancePolicySerializer(serializers.ModelSerializer):
)
return instance
class ManageBaseArtistSerializer(serializers.ModelSerializer):
domain = serializers.CharField(source="domain_name")
class Meta:
model = music_models.Artist
fields = ["id", "fid", "mbid", "name", "creation_date", "domain", "is_local"]
class ManageBaseAlbumSerializer(serializers.ModelSerializer):
cover = music_serializers.cover_field
domain = serializers.CharField(source="domain_name")
class Meta:
model = music_models.Album
fields = [
"id",
"fid",
"mbid",
"title",
"creation_date",
"release_date",
"cover",
"domain",
"is_local",
]
class ManageNestedTrackSerializer(serializers.ModelSerializer):
domain = serializers.CharField(source="domain_name")
class Meta:
model = music_models.Track
fields = [
"id",
"fid",
"mbid",
"title",
"creation_date",
"position",
"disc_number",
"domain",
"is_local",
"copyright",
"license",
]
class ManageNestedAlbumSerializer(ManageBaseAlbumSerializer):
tracks_count = serializers.SerializerMethodField()
class Meta:
model = music_models.Album
fields = ManageBaseAlbumSerializer.Meta.fields + ["tracks_count"]
def get_tracks_count(self, obj):
return getattr(obj, "tracks_count", None)
class ManageArtistSerializer(ManageBaseArtistSerializer):
albums = ManageNestedAlbumSerializer(many=True)
tracks = ManageNestedTrackSerializer(many=True)
attributed_to = ManageBaseActorSerializer()
class Meta:
model = music_models.Artist
fields = ManageBaseArtistSerializer.Meta.fields + [
"albums",
"tracks",
"attributed_to",
]
class ManageNestedArtistSerializer(ManageBaseArtistSerializer):
pass
class ManageAlbumSerializer(ManageBaseAlbumSerializer):
tracks = ManageNestedTrackSerializer(many=True)
attributed_to = ManageBaseActorSerializer()
artist = ManageNestedArtistSerializer()
class Meta:
model = music_models.Album
fields = ManageBaseAlbumSerializer.Meta.fields + [
"artist",
"tracks",
"attributed_to",
]
class ManageTrackAlbumSerializer(ManageBaseAlbumSerializer):
artist = ManageNestedArtistSerializer()
class Meta:
model = music_models.Album
fields = ManageBaseAlbumSerializer.Meta.fields + ["artist"]
class ManageTrackSerializer(ManageNestedTrackSerializer):
artist = ManageNestedArtistSerializer()
album = ManageTrackAlbumSerializer()
attributed_to = ManageBaseActorSerializer()
uploads_count = serializers.SerializerMethodField()
class Meta:
model = music_models.Track
fields = ManageNestedTrackSerializer.Meta.fields + [
"artist",
"album",
"attributed_to",
"uploads_count",
]
def get_uploads_count(self, obj):
return getattr(obj, "uploads_count", None)
class ManageTrackActionSerializer(common_serializers.ActionSerializer):
actions = [common_serializers.Action("delete", allow_all=False)]
filterset_class = filters.ManageTrackFilterSet
@transaction.atomic
def handle_delete(self, objects):
return objects.delete()
class ManageAlbumActionSerializer(common_serializers.ActionSerializer):
actions = [common_serializers.Action("delete", allow_all=False)]
filterset_class = filters.ManageAlbumFilterSet
@transaction.atomic
def handle_delete(self, objects):
return objects.delete()
class ManageArtistActionSerializer(common_serializers.ActionSerializer):
actions = [common_serializers.Action("delete", allow_all=False)]
filterset_class = filters.ManageArtistFilterSet
@transaction.atomic
def handle_delete(self, objects):
return objects.delete()