def add_song(request): serializer = SongSerializer(data = request.data) if serializer.is_valid(): """ Check if the song already exists """ jdict = json.loads(json.dumps(request.data)) if len(Song.objects.all().filter(title__iexact = jdict['title']).filter(artist__iexact = jdict['artist']).filter(album__iexact = jdict['album'])) > 0: return Response(serializer.data, status = status.HTTP_200_OK) serializer.save() return Response(serializer.data, status = status.HTTP_201_CREATED) else: return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)
def audio_create(request): file_type = request.data.get('audioFileType') meta = request.data.get('audioFileMetadata') if file_type and meta: if file_type in AUDIO_FILE_TYPE: try: serializer = '' if file_type == Song.TYPE: serializer = SongSerializer(data=meta) elif file_type == Podcast.TYPE: serializer = PodcastSerializer(data=meta) elif file_type == Audiobook.TYPE: serializer = AudiobookSerializer(data=meta) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) except Exception as e: return Response({'error': str(e)}, status.HTTP_400_BAD_REQUEST) else: return Response({'error': ErrorDetail('audioFileType available choice are ' + str(AUDIO_FILE_TYPE), code='required')}, status=status.HTTP_400_BAD_REQUEST) else: return Response({'error': ErrorDetail('audioFileType and audioFileMetadata', code='required')}, status=status.HTTP_400_BAD_REQUEST)
def audio_list(request, audioFileType): audioFileID = request.GET.get('audioFileID') if audioFileType in AUDIO_FILE_TYPE: serializer = None if audioFileType == Song.TYPE: if audioFileID: try: songs = Song.objects.get(id=audioFileID) serializer = SongSerializer(songs) except: pass else: songs = Song.objects.all() serializer = SongSerializer(songs, many=True) elif audioFileType == Podcast.TYPE: if audioFileID: try: podcasts = Podcast.objects.get(id=audioFileID) serializer = PodcastSerializer(podcasts) except: pass else: podcasts = Podcast.objects.all() serializer = PodcastSerializer(podcasts, many=True) elif audioFileType == Audiobook.TYPE: if audioFileID: try: audios = Audiobook.objects.get(id=audioFileID) serializer = AudiobookSerializer(audios) except: pass else: audios = Audiobook.objects.all() serializer = AudiobookSerializer(audios, many=True) if serializer: return Response(serializer.data, status=status.HTTP_200_OK) else: return Response({'error': ErrorDetail('audioFileID {} is not exist.'.format(audioFileID), code='required')}, status=status.HTTP_404_NOT_FOUND) else: return Response({'error': ErrorDetail('audioFileType available choice are ' + str(AUDIO_FILE_TYPE), code='required')}, status=status.HTTP_400_BAD_REQUEST)
def song(request, songid): try: song = Song.objects.get(id=songid) except Song.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = SongSerializer(song) return Response(serializer.data) elif request.method == 'PUT': serializer = SongSerializer(song, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': song.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def post(self, request: Request, *args, **kwargs): panda = None serializer = SongSerializer(data=request.data) if serializer.is_valid(): song = serializer.get_or_create(serializer.validated_data) title = song.title.replace(' ', '%20') song_url = 'https://some-random-api.ml/lyrics?title=' + title data = json.loads(requests.get(song_url).content) if (str(data['author']).lower() == str(song.author).lower()): song.lyrics = data['lyrics'] panda = json.loads( requests.get( 'https://some-random-api.ml/img/panda').content) song.image = panda['link'] else: song = None else: song = None return render(request, "show_song.html", {'song': song})
def list(self, request): queryset = Song.objects.all() http_methods = ['get'] genre = self.request.query_params.get('genre', None) band = self.request.query_params.get('band', None) if genre is not None: queryset = queryset.filter(genre=genre) queryset = queryset.order_by('?')[:10] if band is not None: queryset = queryset.filter(band=band) serializer = SongSerializer(queryset, many=True, context={'request': request}) return Response(serializer.data)
def audio_update(request, audioFileType, audioFileID): meta = request.data.get('audioFileMetadata') if meta: if audioFileType in AUDIO_FILE_TYPE: try: serializer = None audioFile_obj = None if audioFileType == Song.TYPE: try: audioFile_obj = Song.objects.get(id=audioFileID) serializer = SongSerializer(audioFile_obj, data=meta) except: pass if audioFileType == Podcast.TYPE: try: audioFile_obj = Podcast.objects.get(id=audioFileID) serializer = PodcastSerializer(audioFile_obj, data=meta) except: pass if audioFileType == Audiobook.TYPE: try: audioFile_obj = Audiobook.objects.get(id=audioFileID) serializer = AudiobookSerializer(audioFile_obj, data=meta) except: pass if audioFile_obj: if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_200_OK) else: # print(serializer.errors) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response({'error': ErrorDetail('audioFileID {} is not exist.'.format(audioFileID), code='required')}, status=status.HTTP_404_NOT_FOUND) except Exception as e: return Response({'error': str(e)}, status.HTTP_400_BAD_REQUEST) else: return Response({'error': ErrorDetail('audioFileType available choice are ' + str(AUDIO_FILE_TYPE), code='required')}, status=status.HTTP_400_BAD_REQUEST) else: return Response({'error': ErrorDetail('audioFileMetadata', code='required')}, status=status.HTTP_400_BAD_REQUEST)
def setUp(self): serializer = SongSerializer(data={"name": "song", "duration": 600}) if serializer.is_valid(): serializer.save() serializer = PodcastSerializer( data={ "name": "podcast", "duration": 600, "host": "host 1", "participants": "person1, person2, person3, person4, person5, person6, person7" }) if serializer.is_valid(): serializer.save() serializer = AudiobookSerializer( data={ "name": "audiobook", "author": "author 1", "narrator": "narrator 1", "duration": 600 }) if serializer.is_valid(): serializer.save()