Skip to content
Snippets Groups Projects
views.py 1.39 KiB
Newer Older
from rest_framework import mixins
from rest_framework import response
from rest_framework import viewsets
from rest_framework.decorators import list_route

from funkwhale_api.music import models as music_models
from funkwhale_api.users.permissions import HasUserPermission

from . import filters
from . import serializers


class ManageTrackFileViewSet(
Eliot Berriot's avatar
Eliot Berriot committed
    mixins.ListModelMixin,
    mixins.RetrieveModelMixin,
    mixins.DestroyModelMixin,
    viewsets.GenericViewSet,
):
    queryset = (
        music_models.TrackFile.objects.all()
Eliot Berriot's avatar
Eliot Berriot committed
        .select_related("track__artist", "track__album__artist", "library_track")
        .order_by("-id")
    )
    serializer_class = serializers.ManageTrackFileSerializer
    filter_class = filters.ManageTrackFileFilterSet
    permission_classes = (HasUserPermission,)
Eliot Berriot's avatar
Eliot Berriot committed
    required_permissions = ["library"]
    ordering_fields = [
Eliot Berriot's avatar
Eliot Berriot committed
        "accessed_date",
        "modification_date",
        "creation_date",
        "track__artist__name",
        "bitrate",
        "size",
        "duration",
Eliot Berriot's avatar
Eliot Berriot committed
    @list_route(methods=["post"])
    def action(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        serializer = serializers.ManageTrackFileActionSerializer(
Eliot Berriot's avatar
Eliot Berriot committed
            request.data, queryset=queryset
        )
        serializer.is_valid(raise_exception=True)
        result = serializer.save()
        return response.Response(result, status=200)