diff --git a/spotifyvis/templates/spotifyvis/test_db.html b/spotifyvis/templates/spotifyvis/test_db.html index 0bf5b7f..0f481bd 100644 --- a/spotifyvis/templates/spotifyvis/test_db.html +++ b/spotifyvis/templates/spotifyvis/test_db.html @@ -1,31 +1,26 @@ - + - - - - - Test DB Page - - - - - - - + + + + + + Test DB Page + + + + + + + + diff --git a/spotifyvis/utils.py b/spotifyvis/utils.py index 2caf39d..8572444 100644 --- a/spotifyvis/utils.py +++ b/spotifyvis/utils.py @@ -4,7 +4,7 @@ import math import pprint from .models import Artist, User, Track, AudioFeatures -from django.db.models import Count +from django.db.models import Count, Q from django.http import JsonResponse from django.core import serializers import json @@ -317,7 +317,7 @@ def update_artist_genre(headers, artist_obj): # }}} # -# {{{ # +# get_top_genre {{{ # def get_top_genre(headers, top_artist_id): """Updates the top genre for a track by querying the Spotify API @@ -393,3 +393,19 @@ def process_library_stats(library_stats): # }}} process_library_stats # +def get_artists_in_genre(user, genre): + """Return count of artists in genre. + + :genre: genre to count artists for. + + :returns: dict of artists in the genre along with the number of songs they + have. + """ + artist_counts = (Artist.objects.filter(track__users=user) + .filter(track__genre=genre) + # .annotate(num_songs=Count('track', filter=Q(track__genre=genre))) + .annotate(num_songs=Count('track')) + ) + processed_artist_counts = [{'name': artist.name, 'num_songs': artist.num_songs} for artist in artist_counts] + # pprint.pprint(processed_artist_counts) + return processed_artist_counts diff --git a/spotifyvis/views.py b/spotifyvis/views.py index c2a2ae2..c14b5ad 100644 --- a/spotifyvis/views.py +++ b/spotifyvis/views.py @@ -13,7 +13,7 @@ from datetime import datetime from django.shortcuts import render, redirect from django.http import HttpResponse, HttpResponseBadRequest, JsonResponse from django.db.models import Count, Q -from .utils import parse_library, process_library_stats +from .utils import parse_library, process_library_stats, get_artists_in_genre from .models import User, Track, AudioFeatures, Artist # }}} imports # @@ -164,7 +164,8 @@ def user_data(request): def test_db(request): """TODO """ - user_id = "polarbier" + # user_id = "polarbier" + user_id = "35kxo00qqo9pd1comj6ylxjq7" context = { 'user_secret': User.objects.get(user_id=user_id).user_secret, } @@ -180,8 +181,9 @@ def get_artist_data(request, user_secret): user = User.objects.get(user_id=user_secret) artist_counts = Artist.objects.annotate(num_songs=Count('track', filter=Q(track__users=user))) - processed_artist_data = [{'name': artist.name, 'num_songs': artist.num_songs} for artist in artist_counts] - return JsonResponse(data=processed_artist_data, safe=False) + processed_artist_counts = [{'name': artist.name, + 'num_songs': artist.num_songs} for artist in artist_counts] + return JsonResponse(data=processed_artist_counts, safe=False) # }}} get_artist_data # @@ -214,12 +216,14 @@ def get_genre_data(request, user_secret): TODO """ user = User.objects.get(user_secret=user_secret) - genre_counts = (Track.objects.filter(users=user) + genre_counts = (Track.objects.filter(users__exact=user) .values('genre') .order_by('genre') .annotate(num_songs=Count('genre')) ) - # pprint.pprint(genre_counts) + for genre_dict in genre_counts: + genre_dict['artists'] = get_artists_in_genre(user, genre_dict['genre']) + pprint.pprint(list(genre_counts)) return JsonResponse(data=list(genre_counts), safe=False) # }}} get_genre_data #