Beispiel #1
0
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)
Beispiel #2
0
  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
Beispiel #3
0
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)
Beispiel #4
0
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)