viewsets.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from rest_framework import viewsets
  2. from rest_framework import generics
  3. from rest_framework.views import APIView
  4. from rest_framework import status
  5. from rest_framework.response import Response
  6. from .filters import AlbumFilter, ArtistFilter, TrackFilter
  7. from .models import Album, Artist, Track,Playlist,PlaylistTrack
  8. from .serializers import AlbumSerializer, ArtistSerializer, TrackSerializer, PlaylistSerializer, UpdatePlaylistSerializer,PlaylistCreateSerializer
  9. class BaseAPIViewSet(viewsets.ReadOnlyModelViewSet):
  10. lookup_field = "uuid"
  11. lookup_url_kwarg = "uuid"
  12. class BaseAPIViewSet1(viewsets.ModelViewSet):
  13. lookup_field = "uuid"
  14. lookup_url_kwarg = "uuid"
  15. class ArtistViewSet(BaseAPIViewSet):
  16. queryset = Artist.objects.all()
  17. serializer_class = ArtistSerializer
  18. filter_class = ArtistFilter
  19. class AlbumViewSet(BaseAPIViewSet):
  20. queryset = Album.objects.all()
  21. serializer_class = AlbumSerializer
  22. filter_class = AlbumFilter
  23. def get_queryset(self):
  24. queryset = super().get_queryset()
  25. return queryset.select_related("artist").prefetch_related("tracks")
  26. class TrackViewSet(BaseAPIViewSet):
  27. queryset = Track.objects.all()
  28. serializer_class = TrackSerializer
  29. filter_class = TrackFilter
  30. def get_queryset(self):
  31. queryset = super().get_queryset()
  32. return queryset.select_related("album", "album__artist")
  33. class FetchPlaylist(BaseAPIViewSet1):
  34. queryset = Playlist.objects.all()
  35. serializer_class = PlaylistSerializer
  36. def get_queryset(self):
  37. queryset = super().get_queryset()
  38. return queryset
  39. class UpdatePlaylist(generics.UpdateAPIView):
  40. """ update for only playlist name """
  41. queryset = Playlist.objects.all()
  42. serializer_class = UpdatePlaylistSerializer
  43. def get_object(self, *args, **kwargs):
  44. try:
  45. playlist = Playlist.objects.filter(uuid=self.request.data['uuid']).get()
  46. except Playlist.DoesNotExist:
  47. return None
  48. return playlist
  49. def update(self, request, *args, **kwargs):
  50. playlist = self.get_object()
  51. if playlist:
  52. kwargs['partial'] = True
  53. return super(UpdatePlaylist, self).update(request, *args, **kwargs)
  54. else:
  55. response = {'details':"uuid does not exist"}
  56. return response
  57. class CreatePlaylist(generics.CreateAPIView):
  58. '''
  59. Playlist create using uuid and name
  60. '''
  61. serializer_class = PlaylistCreateSerializer
  62. def create(self, request, *args, **kwargs):
  63. response_data = super(CreatePlaylist, self).create(request, *args, **kwargs)
  64. return response_data
  65. class DeletePlaylist(APIView):
  66. '''
  67. Playlist delete using the uuid
  68. '''
  69. def post(self,request,format=None):
  70. try:
  71. playlist=Playlist.objects.get(uuid=request.POST["uuid"])
  72. playlist.delete()
  73. response= {'details':"Playlist is deleted"}
  74. except:
  75. response= {'details':"Record does not exist"}
  76. return Response(response)