Skip to content
Snippets Groups Projects
serializers.py 2.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • from django.db import transaction
    from rest_framework import serializers
    
    from funkwhale_api.common import serializers as common_serializers
    from funkwhale_api.music import models as music_models
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.users import models as users_models
    
    
    from . import filters
    
    
    class ManageTrackFileArtistSerializer(serializers.ModelSerializer):
        class Meta:
            model = music_models.Artist
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            fields = ["id", "mbid", "creation_date", "name"]
    
    
    
    class ManageTrackFileAlbumSerializer(serializers.ModelSerializer):
        artist = ManageTrackFileArtistSerializer()
    
        class Meta:
            model = music_models.Album
            fields = (
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "id",
                "mbid",
                "title",
                "artist",
                "release_date",
                "cover",
                "creation_date",
    
            )
    
    
    class ManageTrackFileTrackSerializer(serializers.ModelSerializer):
        artist = ManageTrackFileArtistSerializer()
        album = ManageTrackFileAlbumSerializer()
    
        class Meta:
            model = music_models.Track
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            fields = ("id", "mbid", "title", "album", "artist", "creation_date", "position")
    
    
    
    class ManageTrackFileSerializer(serializers.ModelSerializer):
        track = ManageTrackFileTrackSerializer()
    
        class Meta:
            model = music_models.TrackFile
            fields = (
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "id",
                "path",
                "source",
                "filename",
                "mimetype",
                "track",
                "duration",
                "mimetype",
                "bitrate",
                "size",
                "path",
                "library_track",
    
            )
    
    
    class ManageTrackFileActionSerializer(common_serializers.ActionSerializer):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        actions = ["delete"]
        dangerous_actions = ["delete"]
    
        filterset_class = filters.ManageTrackFileFilterSet
    
        @transaction.atomic
        def handle_delete(self, objects):
            return objects.delete()
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    
    
    class ManageUserSerializer(serializers.ModelSerializer):
        permissions = serializers.SerializerMethodField()
    
        class Meta:
            model = users_models.User
            fields = (
                "id",
                "username",
                "email",
                "name",
                "is_active",
                "is_staff",
                "is_superuser",
                "date_joined",
                "last_activity",
                "permissions",
                "privacy_level",
            )
            read_only_fields = [
                "id",
                "email",
                "privacy_level",
                "username",
                "date_joined",
                "last_activity",
            ]
    
        def get_permissions(self, o):
            return o.get_permissions(defaults=self.context.get("default_permissions"))