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
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
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
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
def test_find_in_list_of_tuples_no_value(self): assert MLearnipy.find_in_list_of_tuples([('axa','alfa'),('bxb', 'beta')], '', 0,1) == None
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 ')