def _update_models(self, track_details, action, user_slack_id): try: user_profile = UserProfile.objects.get( slack_username=user_slack_id) except UserProfile.DoesNotExist: return None try: track = Track.objects.get(spotify_id=track_details['uri']) except Track.DoesNotExist: track = Track() track.title = track_details['name'] track.spotify_id = track_details['uri'] track.album = track_details['album']['name'] track.url = track_details[ "preview_url"] if "preview_url" in track_details else "" track.save() for artist_details in track_details["artists"]: try: artist = Artist.objects.get(spotify_id=artist_details["uri"]) except Artist.DoesNotExist: artist = Artist() artist.spotify_id = artist_details["uri"] artist.name = artist_details["name"] artist.save() track.artists.add(artist) track.save() try: playlist = Playlist.objects.get(name="Fusebox") except Playlist.DoesNotExist: playlist = Playlist() playlist.name = "Fusebox" playlist.spotify_id = os.getenv("SPOTIFY_PLAYLIST_ID") playlist.save() try: playlist_tracks = PlaylistTracks.objects.get(track=track, playlist=playlist) except PlaylistTracks.DoesNotExist: playlist_tracks = PlaylistTracks() playlist_tracks.track = track playlist_tracks.playlist = playlist if "queue" == action: playlist_tracks.queued_by = user_profile.user playlist_tracks.queued_on = timezone.now() elif "dequeue" == action: playlist_tracks.dequeued_by = user_profile.user playlist_tracks.dequeued_on = timezone.now() playlist_tracks.save()
def post_geo(data): try: track = Track.objects.get(member_id=data['member']) Track.objects.filter(member_id=data['member']).update( coordinates=data['coordinates']) return HttpResponse(renderers.JSONRenderer().render( {'coordinates': data['coordinates']})) except Track.DoesNotExist: track = Track(member_id=data['member'], coordinates=data['coordinates']) track.save() return HttpResponse(renderers.JSONRenderer().render( {'coordinates': track.coordinates}))
def current_playing_track(): client = get_spotify() logger = logging.getLogger(__name__) played = None try: track_details = client._get("me/player") except Exception as e: logger.error("Failed to retrieve details about current playing song: " + str(e)) track_details = None if track_details \ and "item" in track_details \ and "uri" in track_details["item"] \ and "artists" in track_details["item"]: try: track = Track.objects.get(spotify_id=track_details["item"]["uri"]) except Track.DoesNotExist: track = Track() track.title = track_details["item"]["name"] track.album = track_details["item"]["album"]["name"] track.spotify_id = track_details["item"]["uri"] track.url = track_details["item"]["preview_url"] track.save() for artist_details in track_details["item"]["artists"]: try: artist = Artist.objects.get(spotify_id=artist_details["uri"]) except Artist.DoesNotExist: artist = Artist() artist.spotify_id = artist_details["uri"] artist.name = artist_details["name"] artist.save() track.artists.add(artist) track.save() # Update played song if it has not played recently time_threshold = timezone.now() - timedelta(minutes=120) try: played = Played.objects.filter(track=track, on__gt=time_threshold)[:1].get() except Played.DoesNotExist: played = Played() played.on = timezone.now() played.track = track played.save() else: track = None return track, track_details, played
def upsert_track(path, album): audio = MP3(os.path.join(root, path), ID3=EasyID3) title = audio['title'] artist = audio['artist'] track_num = audio['tracknumber'][0] duration = audio.info.length t = Track( title=title, artist=artist, album=album, track_number=track_num, duration=duration, ) try: t.save() except (django.db.utils.IntegrityError, ValueError): pass