def best_artists(request): act_info = [] unknown = 0 no_info = 0 total = 0 with_media = 0 with_resources = 0 for show in Show.objects(): artist_map = show.related_artists() total += 1 if any( a.media for a in artist_map.values() ): with_media += 1 if show.parse_meta.resources: with_resources += 1 had_headliner = False chosen = -1 chosen_play_count = 0 for i, a in enumerate(show.artists): to_add = i + 1 - len(act_info) for x in range(to_add): act_info.append({ 'num_total': 0, 'num_with_media': 0, 'should_see': 0 }) play_count = 0 act_info[i]['num_total'] += 1 artist = None if a.artist_id: artist = artist_map.get(a.artist_id) if artist: play_count = reduce(lambda x, y: max(x, y), [m.stats.number_of_plays for m in artist.media], 0) if artist.media: act_info[i]['num_with_media'] += 1 if i == 0 and play_count > 0: had_headliner = True if play_count > chosen_play_count: chosen = i chosen_play_count = play_count if chosen == -1: no_info += 1 else: if not had_headliner: unknown += 1 else: act_info[chosen]['should_see'] += 1 for info in act_info: info['percent_with_media'] = int(100.0 * info['num_with_media'] / info['num_total']) context = { 'act_info': act_info, 'total': total, 'with_media': with_media, 'with_resources': with_resources, 'unknown': unknown, 'no_info': no_info } return render_to_response('fancy_admin/best_artists.html', context)
def shows(request): page_number = request.GET.get('page', 1) today = datetime.now().date() initial = { 'show_range': 'on', 'show_date': today } data = None if request.GET.get('search'): data = request.GET show_form = AdminShowFilterForm(data = data, initial = initial) if data and not show_form.is_valid(): raise Exception('Invalid admin filters') if data: filters = show_form.cleaned_data else: filters = initial shows = Show.objects() if filters.get('query'): f = SearchFilter(filters.get('query'), 'title', 'venue__name', 'parse_meta__parser_id') shows = f.apply(shows) if filters.get('show_date'): range_map = { 'on': None, 'before': 'lt', 'after': 'gt' } range_method = range_map[filters.get('show_range')] f = DateFilter(filters.get('show_date'), 'date', range_method) shows = f.apply(shows) if filters.get('is_hidden'): shows = shows.filter(visible = False) if filters.get('no_image'): shows = shows.filter(image_url = None) if filters.get('restrict') == 'handling_failed': shows = transform_exec_js(Show, shows, show_has_resource_state(RESOURCE_HANDLING_FAILED)) elif filters.get('restrict') == 'not_handled': shows = transform_exec_js(Show, shows, show_has_resource_state(RESOURCE_NOT_HANDLED)) elif filters.get('restrict') == 'no_headliner': shows = transform_exec_js(Show, shows, show_lacks_headliner) if filters.get('resource') not in ('', None): shows = transform_exec_js(Show, shows, show_has_resource(filters.get('resource'))) shows = shows.order_by('date', '-rank') paginator = Paginator(shows, 100) page = paginator.page(page_number) shows = list(page.object_list) today = datetime.today().replace(hour = 0, minute = 0, second = 0) three_days_ago = today - timedelta(days = 3) for show in shows: artist_map = show.related_artists() for a in show.artists: a.full = artist_map.get(a.artist_id) context = { 'show_form': show_form, 'shows': shows, 'page': page, 'paginator': paginator } return render_to_response('fancy_admin/shows.html', context)
def show_details(request, venue, year, month, day, artist): venue = Venue.objects.get(slug=venue) day = datetime(int(year), int(month), int(day)) today = datetime.today() look_until = today + timedelta(days=30) matching_shows = Show.objects(venue__url=venue.url, date=day) show = None for prospect in matching_shows: if prospect.slug() == artist: show = prospect break if not show: return show_list(request, matching_shows, "fancy_main/shows_at_venue.html", {"venue": venue, "day": day}) artist_ids = {} artist_map = {} artists = [] shows_by_artist = {} for info in filter(lambda x: x.artist_id, show.artists): if info.artist_id not in artist_map: artist_ids[info.artist_id] = True if artist_ids: show_range = Q(date__gte=today) & Q(date__lte=look_until) artist_shows = ( Show.objects(artist_ids__in=artist_ids.keys(), id__ne=show.id).filter(show_range).order_by("date") ) for artist_show in artist_shows: for info in filter(lambda x: x.artist_id, artist_show.artists): if info.artist_id not in shows_by_artist: shows_by_artist[info.artist_id] = [] shows_by_artist[info.artist_id].append(artist_show) artist_map = Artist.objects.in_bulk(artist_ids.keys()) for artist_info in show.artists: artists.append( { "info": artist_info, "artist": artist_map.get(artist_info.artist_id), "shows": shows_by_artist.get(artist_info.artist_id, []), } ) venues = list(Venue.objects()) saved_shows = {} if request.user.is_authenticated(): saved_shows = request.user.starred_show_set.get_id_dict() context = { "show": show, "shows": [show], "artists": artists, "venue": Venue.objects.get(url=show.venue.url), "venues": venues, "saved_shows": saved_shows, } return render_to_response("fancy_main/show_details.html", RequestContext(request, context))