예제 #1
0
def playlist_export_report_worker(results, request_params):
    form = PlaylistReportForm(data=request_params)
    if not form.is_valid():
        # TODO(Kumar) make this visible to the user
        raise ValueError('Invalid PlaylistReportForm')
    from_date = form.cleaned_data['from_date']
    to_date = form.cleaned_data['to_date']

    if results is None:
        # when starting the job, init file lines with the header row...
        results = {
            'items': {},  # items keyed by datetime established
            'last_offset': 0,
            'from_date': str(from_date),
            'to_date': str(to_date),
        }

    offset = results['last_offset']
    last_offset = offset+50
    results['last_offset'] = last_offset

    query = filter_playlist_events_by_date_range(from_date, to_date)
    all_entries = query[ offset: last_offset ]

    if len(all_entries) == 0:
        finished = True
    else:
        finished = False

    for entry in all_entries:
        established = _get_entity_attr(entry, 'established_display')
        report_key = as_encoded_str(str(established))
      
        if type(entry) == PlaylistBreak:
            results['items'][report_key] = {
                'established': as_encoded_str(established.strftime('%Y-%m-%d %H:%M:%S')),
                'is_break': True
            }
            continue
       
        playlist = _get_entity_attr(entry, 'playlist') 
        track = _get_entity_attr(entry, 'track')
        results['items'][report_key] = {
            'channel': as_encoded_str(_get_entity_attr(playlist, 'channel')),
            'date': as_encoded_str(established.strftime("%m/%d/%y")),
            'duration_ms': as_encoded_str(_get_entity_attr(track, 
                                                           'duration_ms', 0)),
            'established': as_encoded_str(established.strftime('%Y-%m-%d %H:%M:%S')),
            'artist_name': as_encoded_str(_get_entity_attr(entry,
                                                           'artist_name')),
            'track_title': as_encoded_str(_get_entity_attr(entry,
                                                            'track_title')),
            'album_title': as_encoded_str(_get_entity_attr(entry, 
                                                           'album_title_display')),
            'label': as_encoded_str(_get_entity_attr(entry, 'label_display')),
            'is_break': False
        }

    return finished, results
예제 #2
0
def playlist_report_worker(results, request_params):
    form = PlaylistReportForm(data=request_params)
    if not form.is_valid():
        # TODO(Kumar) make this visible to the user
        raise ValueError('Invalid PlaylistReportForm')
    from_date = form.cleaned_data['from_date']
    to_date = form.cleaned_data['to_date']

    if results is None:
        # when starting the job, init file lines with the header row...
        results = {
            'items': {},  # items keyed by play key
            'last_offset': 0,
            'play_counts': {},  # play keys to number of plays
            'from_date': str(from_date),
            'to_date': str(to_date),
        }

    offset = results['last_offset']
    last_offset = offset + 50
    results['last_offset'] = last_offset

    query = filter_tracks_by_date_range(from_date, to_date)
    all_entries = query[offset:last_offset]

    if len(all_entries) == 0:
        finished = True
    else:
        finished = False

    for entry in all_entries:
        play_key = play_count_key(entry)
        if play_key in results['play_counts']:
            results['play_counts'][play_key] += 1
            continue
        else:
            results['play_counts'][play_key] = 1
        results['items'][play_key] = {
            'album_title':
            as_encoded_str(_get_entity_attr(entry, 'album_title')),
            'artist_name':
            as_encoded_str(_get_entity_attr(entry, 'artist_name')),
            'label':
            as_encoded_str(_get_entity_attr(entry, 'label')),
            'heavy_rotation':
            str(int(bool(HEAVY_ROTATION_TAG in entry.categories))),
            'light_rotation':
            str(int(bool(LIGHT_ROTATION_TAG in entry.categories)))
        }

    return finished, results
예제 #3
0
def playlist_report_worker(results, request_params):
    form = PlaylistReportForm(data=request_params)
    if not form.is_valid():
        # TODO(Kumar) make this visible to the user
        raise ValueError('Invalid PlaylistReportForm')
    from_date = form.cleaned_data['from_date']
    to_date = form.cleaned_data['to_date']

    if results is None:
        # when starting the job, init file lines with the header row...
        results = {
            'items': {},  # items keyed by play key
            'last_offset': 0,
            'play_counts': {},  # play keys to number of plays
            'from_date': str(from_date),
            'to_date': str(to_date),
        }

    offset = results['last_offset']
    last_offset = offset+50
    results['last_offset'] = last_offset

    query = filter_tracks_by_date_range(from_date, to_date)
    all_entries = query[ offset: last_offset ]

    if len(all_entries) == 0:
        finished = True
    else:
        finished = False

    for entry in all_entries:
        play_key = play_count_key(entry)
        if play_key in results['play_counts']:
            results['play_counts'][play_key] += 1
            continue
        else:
            results['play_counts'][play_key] = 1
        results['items'][play_key] = {
            'album_title': as_encoded_str(_get_entity_attr(entry,
                                                           'album_title')),
            'artist_name': as_encoded_str(_get_entity_attr(entry,
                                                           'artist_name')),
            'label': as_encoded_str(_get_entity_attr(entry, 'label')),
            'heavy_rotation': str(int(bool(HEAVY_ROTATION_TAG in
                                           entry.categories))),
            'light_rotation': str(int(bool(LIGHT_ROTATION_TAG in
                                           entry.categories)))
        }

    return finished, results
예제 #4
0
def report_export_playlist(request, template='playlists/export_reports.html'):
    to_date = datetime.now().date()
    from_date = to_date - timedelta(days=1)
    form = PlaylistReportForm({'from_date': from_date, 'to_date': to_date})
    vars = {'form': form}
    return render_to_response(template,
                              vars,
                              context_instance=RequestContext(request))
예제 #5
0
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))
예제 #6
0
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))
예제 #7
0
def playlist_export_report_worker(results, request_params):
    form = PlaylistReportForm(data=request_params)
    if not form.is_valid():
        # TODO(Kumar) make this visible to the user
        raise ValueError('Invalid PlaylistReportForm')
    from_date = form.cleaned_data['from_date']
    to_date = form.cleaned_data['to_date']

    if results is None:
        # when starting the job, init file lines with the header row...
        results = {
            'items': {},  # items keyed by datetime established
            'last_offset': 0,
            'from_date': str(from_date),
            'to_date': str(to_date),
        }

    offset = results['last_offset']
    last_offset = offset + 50
    results['last_offset'] = last_offset

    query = filter_playlist_events_by_date_range(from_date, to_date)
    all_entries = query[offset:last_offset]

    if len(all_entries) == 0:
        finished = True
    else:
        finished = False

    for entry in all_entries:
        established = _get_entity_attr(entry, 'established_display')
        report_key = as_encoded_str(str(established))

        if type(entry) == PlaylistBreak:
            results['items'][report_key] = {
                'established':
                as_encoded_str(established.strftime('%Y-%m-%d %H:%M:%S')),
                'is_break':
                True
            }
            continue

        playlist = _get_entity_attr(entry, 'playlist')
        track = _get_entity_attr(entry, 'track')
        results['items'][report_key] = {
            'channel':
            as_encoded_str(_get_entity_attr(playlist, 'channel')),
            'date':
            as_encoded_str(established.strftime("%m/%d/%y")),
            'duration_ms':
            as_encoded_str(_get_entity_attr(track, 'duration_ms', 0)),
            'established':
            as_encoded_str(established.strftime('%Y-%m-%d %H:%M:%S')),
            'artist_name':
            as_encoded_str(_get_entity_attr(entry, 'artist_name')),
            'track_title':
            as_encoded_str(_get_entity_attr(entry, 'track_title')),
            'album_title':
            as_encoded_str(_get_entity_attr(entry, 'album_title_display')),
            'label':
            as_encoded_str(_get_entity_attr(entry, 'label_display')),
            'is_break':
            False
        }

    return finished, results