def getNextSong(self): try: song, request = Music.next_song_and_request() # file is gone, delete it and move on to the next one fileName = song.filename if not os.path.exists(fileName): song.delete() return self.getNextSong() if request: request.fulfilled = True request.save() Music.objects.filter(playing=True).update(playing=False) song.playing = True song.save() print("Next song to play: %s" % fileName) self.fd = open(fileName, 'rb') self.file_size = os.path.getsize(fileName) # if there is valid ID3 data, read it out of the file first, # so we can skip sending it to the client try: self.id3 = id3reader.Reader(self.fd) if isinstance(self.id3.header.size, int) and self.id3.header.size < self.file_size: # read out the id3 data self.fd.seek(self.id3.header.size + 1, os.SEEK_SET) except id3reader.Id3Error: self.id3 = None except StopIteration: fileName = None self.fd = None except IOError: self.fd = None