예제 #1
0
    def test_fetch_song_features__with_3_ids(self):
        lp = MLearnipy(username, auth=token())
        # creates a fake python object for further testing
        lp.user_playlist_tracks = MagicMock(return_value=playlist)
        lp.audio_features = MagicMock(return_value=mock_audio_features_any * 3)

        assert lp._fetch_song_features(([pl_1_song_id] * 3)) == mock_audio_features_any * 3
예제 #2
0
def sp():
    learnipy = MLearnipy(username, auth=token())
    # creates a fake python object for further testing
    learnipy.user_playlist_tracks = MagicMock(return_value=playlist)
    learnipy.audio_features = MagicMock(return_value=mock_audio_features)
    # sets default username for the instance
    learnipy.default_username = username
    return learnipy
예제 #3
0
        def sppp():
            learnipy = MLearnipy(username, auth=token())
            # creates a fake python object for further testing
            learnipy.user_playlist_tracks = MagicMock(return_value=playlist)
            learnipy.audio_features = MagicMock(return_value=mock_audio_features)
            learnipy.fetch_filtered_features = MagicMock(
                return_value=[{'id': [pl_1_song_id] * 2, 'energy': [pl_1_song_energy] * 2}, [playlist_id]*2])

            # sets default username for the instance
            learnipy.default_username = username
            return learnipy
예제 #4
0
    def test_fetch_song_features__with_120_ids(self):
        lp = MLearnipy(username, auth=token())
        # creates a fake python object for further testing
        lp.audio_features = MagicMock(return_value=mock_audio_features_any * 60)

        assert lp._fetch_song_features(([pl_1_song_id] * 120)) == mock_audio_features_any * 120
예제 #5
0
    def test_find_in_list_of_tuples_no_value(self):

       assert MLearnipy.find_in_list_of_tuples([('axa','alfa'),('bxb', 'beta')], '', 0,1) == None
예제 #6
0
def main():
    token = fetch_token()
    if token:
        sp = MLearnipy(username, auth=token)

        unsorted_playlist, all_playlists = sp.get_target_and_all_other_pls(selected_features)

        # Form a data-frame for ml analysis
        already_sorted_set = DatasetFormer(all_playlists, 'playlist_id', ['id'])
        incorrectly_sorted_set = DatasetFormer(unsorted_playlist, 'playlist_id', ['id'])

        # playlists_for_unsorted_songs contains ids for playlists to which unsorted songs have to be moved
        # elements of playlists_for_unsorted_songs are in the same order as songs in incorrectly_sorted_set
        playlists_for_unsorted_songs = predict_playlists_for_unsorted_songs(already_sorted_set, incorrectly_sorted_set)

        logger.debug("predicted list: {}".format(playlists_for_unsorted_songs))
        logger.debug("names: {}".format(already_sorted_set.target_names))
        logger.debug("ids : {}".format(already_sorted_set.targets_as_ids))

        remaped_playlist = already_sorted_set.remap_list_of_targets_to_initial_value(playlists_for_unsorted_songs)
        logger.debug("Songs remapped: {}".format(remaped_playlist))

        # returns destination playlist from their respective ids
        pl_names = sp.last_fetch_of_all_pls

        sp.print_separator(' Decluter suggestions ')

        # gets all song ids
        song_ids_list = incorrectly_sorted_set.popped_entries['id']
        raw_track_list = sp.resolve_song_names_from_id_list(song_ids_list)

        tracks = list(
            map(make_track_names, raw_track_list))

        for index,playlist in list(enumerate(remaped_playlist, start=0)):
            # todo add song names here:
            print('#{}\t{}\t->\t{}'.format(index, tracks[index], sp.find_in_list_of_tuples(pl_names, playlist, 0, 1)))

        sp.print_separator(' Chose songs you want to move ')

        for index, playlist in list(enumerate(remaped_playlist, start=0)):

            track = tracks[index]
            pl_name = sp.find_in_list_of_tuples(pl_names, playlist, 0, 1)

            print('Move:\t{}\n#{}\t{} -> {}\n'.format((raw_track_list[index][2]),index, track, pl_name))

            # asks if user want to move a song to a predicted playlist
            if user_confirms():
                print('Moving...')

                # todo: add moving here
                sp.user_playlist_add_tracks(username, playlist, [song_ids_list[index]])

                print('Do you wish to delete the song you just moved?')
                if user_confirms():
                    print('Deleting...')
                    # todo: delete songs here
                    sp.user_playlist_remove_all_occurrences_of_tracks(username, unsorted_playlist['playlist_id'][0], [song_ids_list[index]])


                else:
                    pass

            else:
                pass
            sp.print_separator('')
        sp.print_separator(' Decluterfy finished ')