def show_link_artist(request, show_id, artist_position): show = Show.objects.with_id(show_id) artist_info = show.artists[int(artist_position)] query = request.REQUEST.get('query', '') if request.REQUEST.get('link') and request.REQUEST.get('artist'): artist = Artist.objects.with_id(request.REQUEST.get('artist')) show.artists[int(artist_position)].artist_id = artist.id show.save() return HttpResponseRedirect(reverse('admin-show-edit', kwargs = {'show_id': show.id_str})) else: context = { 'query': query, 'show': show, 'artist_position': artist_position, 'artist_info': artist_info, 'matching': [] } if query: context['matching'] = Artist.objects(name__icontains = query).order_by('name').limit(10) return render_to_response('fancy_admin/show_link_artist.html', context)
def clean_name(self): name = self.cleaned_data['name'] match_args = { 'normalized_name': lang.normalize(name) } if self.instance: match_args['id__ne'] = self.instance.pk if Artist.objects(**match_args).count() > 0: raise forms.ValidationError('Another artist with this name already exists') return name
def media(request): items = [] today = datetime.now().replace(hour = 0, minute = 0, second = 0) thirty_days_ago = today - timedelta(days = 30) for artist in Artist.objects(): for m in artist.media: stats = m.stats.stats_over(thirty_days_ago, today) items.append({'artist': artist, 'media': m, 'plays_per_day': stats.number_of_plays or '' }) context = { 'media': items } return render_to_response('fancy_admin/media.html', context)
def artists(request): page_number = request.GET.get('page', 1) artist_form = AdminArtistFilterForm(data = request.GET) if not artist_form.is_valid(): raise Exception('Invalid admin filters') filters = artist_form.cleaned_data artists = Artist.objects() artists = artists.order_by('name') if filters.get('query'): f = SearchFilter(filters.get('query'), 'name') artists = f.apply(artists) if filters.get('suspect'): artists = transform_exec_js(Artist, artists, artist_is_suspect()) paginator = Paginator(artists, 10000) page = paginator.page(page_number) artists = [] today = datetime.now().replace(hour = 0, minute = 0, second = 0) yesterday = today - timedelta(days = 1) three_days_ago = today - timedelta(days = 3) thirty_days_ago = today - timedelta(days = 30) periods = ( ('last_30_days', thirty_days_ago, yesterday), # ('last_three_days', three_days_ago, yesterday), # ('yesterday', yesterday, today) ) for artist in list(page.object_list): stats = { } profiles = { } artists.append({'artist': artist, 'stats': stats, 'profiles': profiles}) last_sum = None for profile in artist.profiles: profiles[profile.system_id] = True for period, start, end in periods: media_info = [a.stats.stats_over(start, end).number_of_plays or 0 for a in artist.audio] media_info.sort(reverse = True) if len(media_info[0:3]) > 0: stats[period] = sum(media_info[0:3])/len(media_info[0:3]) else: stats[period] = '' if last_sum and info[period]: stats['%s_perc' % period] = int((1.0 * stats[period] - last_sum) / last_sum * 100) last_sum = stats[period] context = { 'artist_form': artist_form, 'artists': artists, 'page': page, 'paginator': paginator } return render_to_response('fancy_admin/artists.html', context)