def stats(self): if not self._stats: stats = { } for stat in SystemStat.objects(): stats[ stat.system_id ] = stat self._stats = stats return self._stats
def show_edit(request, show_id): show = Show.objects.with_id(show_id) if request.method == 'POST': data = request.POST else: data = None forms = [] context = { 'show': show } show_form = ShowForm( prefix = 'show', data = data, initial = initial_for_instance(ShowForm, show)) venue_form = ShowVenueForm( prefix = 'venue', data = data, initial = initial_for_instance(ShowVenueForm, show.venue)) artist_forms = [] for i, artist in enumerate(show.artists): artist_forms.append(ArtistInfoForm(prefix = 'artist-%d' % i, data = data, instance = artist)) forms.extend([show_form, venue_form]) forms.extend(artist_forms) if all(f.is_valid() for f in forms): raise Exception("Save is currently unimplemented") context['saved'] = True elif data: context['error'] = True artist_map = show.related_artists() stats = { } for stat in SystemStat.objects(): stats[ stat.system_id ] = stat for a in artist_map.values(): for m in a.media: plays_per_day = m.stats.stats_last_30_days().number_of_plays system_stat = stats.get(m.system_id) if plays_per_day != None and system_stat: m.stats.score = ( plays_per_day - system_stat.plays_per_day) / system_stat.stddev for artist_info in show.artists: if artist_info.artist_id: artist_info.full = artist_map[artist_info.artist_id] context.update({ 'show_form': show_form, 'venue_form': venue_form, 'artist_forms': artist_forms }) return render_to_response('fancy_admin/show_edit.html', context)
def summary(request): collections = { 'shows': Show.objects.count(), 'artists': Artist.objects.count() } associations = { } profiles = [ ] media_summary = [ ] for doc in Show.objects.map_reduce(query.association_map, query.association_reduce): associations[doc.key] = doc.value for doc in Artist.objects.map_reduce(query.profile_map, query.profile_reduce): profiles.append({'system_id': doc.key, 'number': doc.value}) profiles.sort(key = lambda x: x['number'], reverse = True) system_stats = { } stats_scope = { 'start_date': datetime.now().replace(hour = 0, minute = 0, second = 0) - timedelta(days = 30), 'end_date': datetime.now().replace(hour = 0, minute = 0, second = 0) } for stat in SystemStat.objects(): system_stats[ stat.system_id ] = { 'mean': stat.plays_per_day, 'stddev': stat.stddev } for doc in Artist.objects.map_reduce(query.media_map, query.media_reduce): summary = {'media_type': doc.key, 'stats': doc.value} summary['stats'].update(system_stats.get(doc.key, {})) media_summary.append(summary) media_summary.sort(key = lambda x: x['stats']['number_of_plays'], reverse = True) context = { 'collections': collections, 'artist_association': associations, 'profiles': profiles, 'media_summary': media_summary } return render_to_response('fancy_admin/summary.html', context)