Ejemplo n.º 1
0
    def test_recent_tracks_are_filtered(
        self,
        mock_spotify_playlist,
        mock_spotify_library,
        mock_calculate_ratings,
        mock_fetch_recommendations,
        mock_top_tracks,
        mock_recent_tracks,
    ):
        recent_track_1 = TopTrack(track_name="SWALBR",
                                  artist="Cream",
                                  playcount=1)
        recent_track_2 = TopTrack(track_name="Badge",
                                  artist="Cream",
                                  playcount=1)
        recent_track_3 = TopTrack(track_name="Layla",
                                  artist="Derek & the Dominos",
                                  playcount=8)
        mock_recent_tracks.return_value = [
            recent_track_1,
            recent_track_2,
            recent_track_3,
        ]

        mock_top_tracks.return_value = [recent_track_3]

        new_recommendation = RecommendedTrack(
            track_name="Key to the Highway",
            artist="Derek & the Dominos",
            recommendation_rating=8,
        )
        already_scrobbled_recommendation_1 = RecommendedTrack(
            track_name="Badge", artist="Cream", recommendation_rating=8)
        already_scrobbled_recommendation_2 = RecommendedTrack(
            track_name="SWALBR", artist="Cream", recommendation_rating=8)
        recommendations = [
            new_recommendation,
            already_scrobbled_recommendation_1,
            already_scrobbled_recommendation_2,
        ]
        mock_fetch_recommendations.fetch_recommendations.return_value = recommendations

        mock_calculate_ratings.return_value = recommendations
        mock_spotify_library.get_saved_tracks.return_value = []
        mock_spotify_playlist.get_tracks_in_playlists.return_value = []

        self.assertCountEqual(
            generate_recommendations(spotify=None,
                                     lastfm_user="******",
                                     lastfm_api_key=""),
            [new_recommendation],
        )
Ejemplo n.º 2
0
def fetch_top_tracks(user, api_key, a_period=period.OVERALL):
    """Fetches the top tracks for the given user over the given period"""

    logging.info("Fetching top tracks for user " + user + " over period " +
                 a_period)

    paginated_json_responses = fetch_paginated_response(
        URL, user, api_key, "toptracks", [{
            "key": "period",
            "value": a_period
        }])

    top_tracks = []
    for json_response in paginated_json_responses:
        for track in json_response["toptracks"]["track"]:
            top_tracks.append(
                TopTrack(
                    parse_track_name(track),
                    parse_artist(track),
                    int(track["playcount"]),
                ))

    # Filter out tracks with a playcount of 1, since those really shouldn't be considered "top"
    top_tracks = [track for track in top_tracks if track.playcount > 1]

    logging.info("Fetched " + str(len(top_tracks)) + " top tracks")
    logging.debug("Fetched tracks: " + str(top_tracks))
    return top_tracks
Ejemplo n.º 3
0
    def test_blacklisted_artists_filtering_should_ignore_case(
        self,
        mock_spotify_playlist,
        mock_spotify_library,
        mock_calculate_ratings,
        mock_fetch_recommendations,
        mock_top_tracks,
        mock_recent_tracks,
    ):
        mock_recent_tracks.return_value = []
        mock_top_tracks.return_value = [
            TopTrack(track_name="everything i wanted",
                     artist="Billie Eilish",
                     playcount=5)
        ]

        recommendation = RecommendedTrack(track_name="Bad Music",
                                          artist="Zayn",
                                          recommendation_rating=1)
        recommendations = [recommendation]
        mock_fetch_recommendations.fetch_recommendations.return_value = recommendations

        mock_calculate_ratings.return_value = recommendations
        mock_spotify_library.get_saved_tracks.return_value = []
        mock_spotify_playlist.get_tracks_in_playlists.return_value = []

        recommendations = generate_recommendations(
            lastfm_user="",
            lastfm_api_key="",
            spotify=None,
            blacklisted_artists=["ZAYN"],
        )

        self.assertEqual(0, len(recommendations))
 def test_rating_is_reduced_based_on_artist_playcount(
         self, mock_recent_artists):
     mock_recent_artists.return_value = [
         ScrobbledArtist(artist_name="The Beatles", playcount=9)
     ]
     top_track = TopTrack(artist="The Beatles",
                          track_name="Penny Lane",
                          playcount=5)
     recommended_track_1 = RecommendedTrack(
         artist="The Beatles",
         track_name="Strawberry Fields Forever",
         recommendation_rating=1,
     )
     recommended_track_2 = RecommendedTrack(artist="The Beatles",
                                            track_name="Blue Jay Way",
                                            recommendation_rating=1)
     top_tracks_to_recommendations = {
         top_track: [recommended_track_1, recommended_track_2]
     }
     recommendations = calculate_ratings("test", "",
                                         top_tracks_to_recommendations)
     self.assertEqual(5 / (9), recommendations[0].recommendation_rating)
     self.assertEqual(5 / (9), recommendations[1].recommendation_rating)
Ejemplo n.º 5
0
    def test_blacklisted_artists_are_filtered(
        self,
        mock_spotify_playlist,
        mock_spotify_library,
        mock_calculate_ratings,
        mock_fetch_recommendations,
        mock_top_tracks,
        mock_recent_tracks,
    ):
        mock_recent_tracks.return_value = []
        mock_top_tracks.return_value = [
            TopTrack(track_name="Here Comes the Sun",
                     artist="The Beatles",
                     playcount=5)
        ]

        recommendation_1 = RecommendedTrack(track_name="Badge",
                                            artist="Cream",
                                            recommendation_rating=1)
        recommendation_2 = RecommendedTrack(track_name="Penny Lane",
                                            artist="The Beatles",
                                            recommendation_rating=1)
        recommendations = [recommendation_1, recommendation_2]
        mock_fetch_recommendations.fetch_recommendations.return_value = recommendations

        mock_calculate_ratings.return_value = recommendations
        mock_spotify_library.get_saved_tracks.return_value = []
        mock_spotify_playlist.get_tracks_in_playlists.return_value = []

        recommendations = generate_recommendations(
            lastfm_user="******",
            lastfm_api_key="",
            spotify=None,
            blacklisted_artists=["The Beatles"],
        )

        self.assertCountEqual(recommendations, [recommendation_1])