serializers.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. from furl import furl
  2. from rest_framework import serializers
  3. from rest_framework.reverse import reverse as drf_reverse
  4. from .fields import UUIDHyperlinkedIdentityField
  5. from .models import Album, Artist, Track,Playlist,PlaylistTrack
  6. class TrackAlbumArtistSerializer(serializers.ModelSerializer):
  7. uuid = serializers.ReadOnlyField()
  8. url = UUIDHyperlinkedIdentityField(view_name="artist-detail")
  9. class Meta:
  10. model = Artist
  11. fields = ("uuid", "url", "name")
  12. class TrackAlbumSerializer(serializers.ModelSerializer):
  13. uuid = serializers.ReadOnlyField()
  14. url = UUIDHyperlinkedIdentityField(view_name="album-detail")
  15. artist = TrackAlbumArtistSerializer()
  16. class Meta:
  17. model = Album
  18. fields = ("uuid", "url", "name", "artist")
  19. class TrackSerializer(serializers.ModelSerializer):
  20. uuid = serializers.ReadOnlyField()
  21. url = UUIDHyperlinkedIdentityField(view_name="track-detail")
  22. album = TrackAlbumSerializer()
  23. class Meta:
  24. model = Track
  25. fields = ("uuid", "url", "name", "number", "album")
  26. class PlaylistSerializer(serializers.ModelSerializer):
  27. uuid = serializers.ReadOnlyField()
  28. url = UUIDHyperlinkedIdentityField(view_name="playlist-detail")
  29. class Meta:
  30. model = Playlist
  31. fields = ("uuid", "name","url",)
  32. class AlbumTrackSerializer(TrackSerializer):
  33. uuid = serializers.ReadOnlyField()
  34. url = UUIDHyperlinkedIdentityField(view_name="track-detail")
  35. class Meta:
  36. model = Track
  37. fields = ("uuid", "url", "name", "number")
  38. class AlbumArtistSerializer(serializers.ModelSerializer):
  39. uuid = serializers.ReadOnlyField()
  40. url = UUIDHyperlinkedIdentityField(view_name="artist-detail")
  41. class Meta:
  42. model = Artist
  43. fields = ("uuid", "url", "name")
  44. class AlbumSerializer(serializers.ModelSerializer):
  45. uuid = serializers.ReadOnlyField()
  46. url = UUIDHyperlinkedIdentityField(view_name="album-detail")
  47. artist = AlbumArtistSerializer()
  48. tracks = AlbumTrackSerializer(many=True)
  49. class Meta:
  50. model = Album
  51. fields = ("uuid", "url", "name", "year", "artist", "tracks")
  52. class ArtistSerializer(serializers.ModelSerializer):
  53. uuid = serializers.ReadOnlyField()
  54. url = UUIDHyperlinkedIdentityField(view_name="artist-detail")
  55. albums_url = serializers.SerializerMethodField()
  56. class Meta:
  57. model = Artist
  58. fields = ("uuid", "url", "name", "albums_url")
  59. def get_albums_url(self, artist):
  60. path = drf_reverse("album-list", request=self.context["request"])
  61. return furl(path).set({"artist_uuid": artist.uuid}).url
  62. class UpdatePlaylistSerializer(serializers.ModelSerializer):
  63. '''
  64. serializer to update Tacks
  65. '''
  66. def __init__(self, *args, **kwargs):
  67. super(UpdatePlaylistSerializer, self).__init__(*args, **kwargs)
  68. context = kwargs.get('context', None)
  69. if context:
  70. self.request = kwargs['context']['request']
  71. class Meta(object):
  72. '''
  73. meta for user
  74. '''
  75. fields = "__all__"
  76. model = Playlist
  77. def update(self, *args, **kwargs):
  78. self.instance.name = self.request.data['name']
  79. self.instance.save()
  80. return self.instance
  81. def to_representation(self, *args, **kwargs):
  82. _ = self
  83. return {
  84. 'details': "PLAYLIST UPDATED SUCCESSFULLY"
  85. }
  86. class PlaylistCreateSerializer(serializers.ModelSerializer):
  87. '''
  88. Serializer to create tracks
  89. '''
  90. def __init__(self, *args, **kwargs):
  91. super(PlaylistCreateSerializer, self).__init__(*args, **kwargs)
  92. context = kwargs.get('context', None)
  93. if context:
  94. self.request = kwargs['context']['request']
  95. class Meta(object):
  96. '''
  97. meta for creating Playlist
  98. '''
  99. fields = ('uuid', 'name',)
  100. model = Playlist
  101. def create(self, validated_data):
  102. instance = super(PlaylistCreateSerializer, self).create(validated_data)
  103. return instance
  104. def to_representation(self, *args, **kwargs):
  105. _ = self
  106. return {
  107. 'details': "PLAYLIST SUCCESSFULLY CREATED"
  108. }