예제 #1
0
def choose_init_tracks(username):
    '''
    Pick for the user initialization
    '''
    lib_list = userTrack.choose_all_tracks(username)
    lib_list = userTrack.choose_tracks_info(lib_list)
    picker = Picker(lib_list, None, username, None)
    tracks_list = [picker.next_init_lib() for i in xrange(10)]
    return tracks_list
예제 #2
0
def init_emotion(username):
    '''
    start emotion tracks
    '''
    user_tracks = userTrack.choose_all_tracks(username)
    user_tracks = userTrack.choose_tracks_info(user_tracks)
    emotion_gevent = geventWorker.Worker(50, 'add_element')
    emotion_gevent.pack(user_tracks, emotion_contr.calculate_tags)
    lib_emotion_array = emotion_gevent.return_results()

    rec_tracks = userTrack.choose_rec_tracks(username)
    rec_tracks = userTrack.choose_tracks_info(rec_tracks)
    rec_gevent = geventWorker.Worker(50, 'add_element')
    rec_gevent.pack(rec_tracks, emotion_contr.calculate_tags)
    rec_emotion_array = rec_gevent.return_results()

    # emotion_contr.filter_no_tags(lib_emotion_array, rec_emotion_array)

    userTrack.add_tracks_emotion(lib_emotion_array + rec_emotion_array)
예제 #3
0
def store_tracks_info(username):
    '''
    Fetch tracks mp3 url and store them
    '''
    users_tracks = userTrack.choose_all_tracks(username) + \
        userTrack.choose_rec_tracks(username)
    user_tracks = userTrack.choose_tracks_info(users_tracks)
    info.fetch_tracks_urls(user_tracks)
    userTrack.store_tracks_info(user_tracks)
    userTrack.delete_invalid_tracks(username)
예제 #4
0
def choose_tracks(username, lib_ratio, emotion_range):
    '''
    Choose all user tracks from database
    And pick some tracks
    '''
    lib_list = userTrack.choose_all_tracks(username)
    lib_list = userTrack.choose_tracks_info(lib_list)

    rec_list = userTrack.choose_rec_tracks(username)
    rec_list = userTrack.choose_tracks_info(rec_list)

    picker = Picker(lib_list, rec_list, username, emotion_range)
    tracks_list = [
        picker.next_mix(track_number, lib_ratio)
        for track_number in xrange(STORED_TRACKS_NUMBER)
    ]
    next_emotion_range = _next_emotion(emotion_range)
    picker.emotion_range = next_emotion_range
    next_playlist = picker.next_mix(0, lib_ratio)
    return tracks_list, next_playlist
예제 #5
0
def init_pre(username):
    '''
    Download pre 20 tracks' mp3 info
    Put them into redis
    '''
    pre_tracks = userTrack.choose_all_tracks(username)
    pre_tracks = random.sample(pre_tracks, main.PRE_TRACKS_NUMBER)
    pre_tracks = userTrack.choose_tracks_info(pre_tracks)
    info.fetch_tracks_urls(pre_tracks)
    track_contr.filter_no_tracks(pre_tracks)
    userTrack.store_tracks_info(pre_tracks)
예제 #6
0
def get_user_top_tracks(username):
    '''
    Get user's top tracks, every artist's track is limited to
    a certian number
    '''
    tracks_list = userTrack.get_top_level_tracks(username)
    tracks_list = userTrack.choose_tracks_info(tracks_list)
    final_tracks = []
    artists_frequency = {}
    for track in tracks_list:
        if artists_frequency.get(track.artist, 0) <= 6:
            frequency = artists_frequency.get(track.artist, 0) + 1
            artists_frequency[track.artist] = frequency
            final_tracks.append(track)
        if len(final_tracks) >= 700:
            break
    print(len(final_tracks))
    return final_tracks