def report_playlist(request, template='playlists/reports.html'): vars = {} # report vars items = None fields = REPORT_FIELDS # default report if request.method == 'GET': to_date = datetime.now().date() from_date = to_date - timedelta(days=1) items = query_group_by_track_key(from_date, to_date) # default form form = PlaylistReportForm({'from_date': from_date, 'to_date': to_date}) # check form data post elif request.method == 'POST': # generic search form form = PlaylistReportForm(data=request.POST) if form.is_valid(): from_date = form.cleaned_data['from_date'] to_date = form.cleaned_data['to_date'] # special case to download report if request.POST.get('download') == 'Download': fname = "chirp-play-count_%s_%s" % (from_date, to_date) return http_send_csv_file( fname, fields, query_group_by_track_key(from_date, to_date)) # generate report from date range if request.POST.get('search') == 'Search': items = query_group_by_track_key(from_date, to_date) # template vars vars['form'] = form return render_to_response(template, vars, context_instance=RequestContext(request))
def test_report_dates(self): selector = self.get_selector() playlist = ChirpBroadcast() def create_track(artist, album, track, label): track = PlaylistTrack( playlist=playlist, selector=selector, freeform_artist_name=artist, freeform_album_title=album, freeform_track_title=track, freeform_label=label) track.put() return track # default date d = datetime.datetime(2010,01,10,1,1,1) # album 'a', will be played twice albums = ['a','b','c','a'] tracks = ['a','b','c'] for album in albums: for track in tracks: s = "%s_%s" % (album,track) t = create_track("artist_"+s, "album_"+album, "track_"+track, "label_"+s) t.established = d t.put() # change date so each album is played once in a day # total of len(tracks) per day d = d - timedelta(days=1) # run report check against expected counts total_tracks = len(albums) * len(tracks) # date range to get all records from_date = datetime.datetime(2010,01,01,0,0,0) to_date = datetime.datetime(2010,01,20,0,0,0) # test query object recs pl = playlists_views.filter_tracks_by_date_range(from_date, to_date) self.assertEquals(total_tracks, pl.count()) # test group by query, expect a total of 9 recs since album_a was played twice items = playlists_views.query_group_by_track_key(from_date, to_date) for i in items: if i['album_title'] is 'album_a': self.assertEquals(i['play_count'], 2) self.assertEquals(len(items), 9) # check timestamp is set correctly for same date range from_date = to_date = datetime.datetime(2010,01,10,0,0,0) pl = playlists_views.filter_tracks_by_date_range(from_date, to_date) self.assertEquals(len(tracks), pl.count())
def test_report_dates(self): selector = self.get_selector() playlist = ChirpBroadcast() def create_track(artist, album, track, label): track = PlaylistTrack(playlist=playlist, selector=selector, freeform_artist_name=artist, freeform_album_title=album, freeform_track_title=track, freeform_label=label) track.put() return track # default date d = datetime.datetime(2010, 01, 10, 1, 1, 1) # album 'a', will be played twice albums = ['a', 'b', 'c', 'a'] tracks = ['a', 'b', 'c'] for album in albums: for track in tracks: s = "%s_%s" % (album, track) t = create_track("artist_" + s, "album_" + album, "track_" + track, "label_" + s) t.established = d t.put() # change date so each album is played once in a day # total of len(tracks) per day d = d - timedelta(days=1) # run report check against expected counts total_tracks = len(albums) * len(tracks) # date range to get all records from_date = datetime.datetime(2010, 01, 01, 0, 0, 0) to_date = datetime.datetime(2010, 01, 20, 0, 0, 0) # test query object recs pl = playlists_views.filter_tracks_by_date_range(from_date, to_date) self.assertEquals(total_tracks, pl.count()) # test group by query, expect a total of 9 recs since album_a was played twice items = playlists_views.query_group_by_track_key(from_date, to_date) for i in items: if i['album_title'] is 'album_a': self.assertEquals(i['play_count'], 2) self.assertEquals(len(items), 9) # check timestamp is set correctly for same date range from_date = to_date = datetime.datetime(2010, 01, 10, 0, 0, 0) pl = playlists_views.filter_tracks_by_date_range(from_date, to_date) self.assertEquals(len(tracks), pl.count())
def report_playlist(request, template='playlists/reports.html'): vars = {} # report vars items = None fields = REPORT_FIELDS # default report if request.method == 'GET': to_date = datetime.now().date() from_date = to_date - timedelta(days=1) items = query_group_by_track_key(from_date, to_date) # default form form = PlaylistReportForm({'from_date':from_date, 'to_date':to_date}) # check form data post elif request.method == 'POST': # generic search form form = PlaylistReportForm(data=request.POST) if form.is_valid(): from_date = form.cleaned_data['from_date'] to_date = form.cleaned_data['to_date'] # special case to download report if request.POST.get('download') == 'Download': fname = "chirp-play-count_%s_%s" % (from_date, to_date) return http_send_csv_file(fname, fields, query_group_by_track_key(from_date, to_date)) # generate report from date range if request.POST.get('search') == 'Search': items = query_group_by_track_key(from_date, to_date) # template vars vars['form'] = form return render_to_response(template, vars, context_instance=RequestContext(request))