Ensure owner of tracks/albums/artists can approve suggestions

This commit is contained in:
Eliot Berriot 2019-07-18 12:08:20 +02:00
parent 5b7fad0bef
commit 22bd1512c7
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
5 changed files with 86 additions and 7 deletions

View file

@ -19,6 +19,16 @@ from . import filters, models, tasks
cover_field = VersatileImageFieldSerializer(allow_null=True, sizes="square")
def serialize_attributed_to(self, obj):
# Import at runtime to avoid a circular import issue
from funkwhale_api.federation import serializers as federation_serializers
if not obj.attributed_to_id:
return
return federation_serializers.APIActorSerializer(obj.attributed_to).data
class LicenseSerializer(serializers.Serializer):
id = serializers.SerializerMethodField()
url = serializers.URLField()
@ -68,6 +78,7 @@ class ArtistAlbumSerializer(serializers.ModelSerializer):
class ArtistWithAlbumsSerializer(serializers.ModelSerializer):
albums = ArtistAlbumSerializer(many=True, read_only=True)
tags = serializers.SerializerMethodField()
attributed_to = serializers.SerializerMethodField()
class Meta:
model = models.Artist
@ -80,12 +91,15 @@ class ArtistWithAlbumsSerializer(serializers.ModelSerializer):
"albums",
"is_local",
"tags",
"attributed_to",
)
def get_tags(self, obj):
tagged_items = getattr(obj, "_prefetched_tagged_items", [])
return [ti.tag.name for ti in tagged_items]
get_attributed_to = serialize_attributed_to
class ArtistSimpleSerializer(serializers.ModelSerializer):
class Meta:
@ -139,6 +153,7 @@ class AlbumSerializer(serializers.ModelSerializer):
cover = cover_field
is_playable = serializers.SerializerMethodField()
tags = serializers.SerializerMethodField()
attributed_to = serializers.SerializerMethodField()
class Meta:
model = models.Album
@ -155,8 +170,11 @@ class AlbumSerializer(serializers.ModelSerializer):
"is_playable",
"is_local",
"tags",
"attributed_to",
)
get_attributed_to = serialize_attributed_to
def get_tracks(self, o):
ordered_tracks = o.tracks.all()
return AlbumTrackSerializer(ordered_tracks, many=True).data
@ -213,6 +231,7 @@ class TrackSerializer(serializers.ModelSerializer):
uploads = serializers.SerializerMethodField()
listen_url = serializers.SerializerMethodField()
tags = serializers.SerializerMethodField()
attributed_to = serializers.SerializerMethodField()
class Meta:
model = models.Track
@ -232,8 +251,11 @@ class TrackSerializer(serializers.ModelSerializer):
"license",
"is_local",
"tags",
"attributed_to",
)
get_attributed_to = serialize_attributed_to
def get_listen_url(self, obj):
return obj.listen_url