Beispiel #1
0
class SpotifyTest(unittest.TestCase):
    def setUp(self):
        self.spotify = Spotify(USERNAME, PASSWORD)
        if not self.spotify.logged_in():
            print "Login failed"

    def tearDown(self):
        self.spotify.logout()

    def test_get_track_by_uri(self):
        test_uris = {
            "spotify:track:4DoiEk7AaubTkIkYencvx7": {
                "title": "Figure 8",
                "artist": "Ellie Goulding",
                "album": "Halcyon"
            },
            "spotify:track:6Qmmzzo9Sdk0QZp0dfLpGk": {
                "title": "Commander",
                "artist": "Kelly Rowland, David Guetta",
                "album": "Commander"
            }
        }

        for uri, reference in test_uris.items():
            track = self.spotify.objectFromURI(uri)
            self.assertEqual(reference["title"], track.getName())
            self.assertEqual(reference["artist"], track.getArtists(nameOnly=True))
            self.assertEqual(reference["album"], track.getAlbum(nameOnly=True))

    def test_playlist_add_delete(self):
        playlist_name = "unittests"
        before = len(self.spotify.getPlaylists())
        new_playlist = self.spotify.newPlaylist(playlist_name)
        time.sleep(2)
        playlist_names = [playlist.getName() for playlist in self.spotify.getPlaylists()]
        self.assertIn(playlist_name, playlist_names)
        self.assertEqual(before+1, len(self.spotify.getPlaylists()))

        self.spotify.removePlaylist(new_playlist)
        time.sleep(2)
        playlist_names = [playlist.getName() for playlist in self.spotify.getPlaylists()]
        self.assertNotIn(playlist_name, playlist_names)
        self.assertEqual(before, len(self.spotify.getPlaylists()))
Beispiel #2
0
class SpotifyClient(object):
    audio_buffer_size = 50
    user_agent = PLUGIN_ID

    def __init__(self, username, password):
        """ Initializer

        :param username:       The username to connect to spotify with.
        :param password:       The password to authenticate with.
        """

        # Hook logging
        Logging.hook(3, Log.Debug)
        Logging.hook(2, Log.Info)
        Logging.hook(1, Log.Warn)
        Logging.hook(0, Log.Error)

        self.username = username
        self.spotify = Spotify(username, password, log_level=3)

    #
    # Public methods
    #

    def is_logged_in(self):
        return self.spotify.logged_in()

    def restart(self, username, password):
        return self.spotify.restart(username, password)

    def shutdown(self):
        self.spotify.shutdown()

    def search(self, query, query_type="all", max_results=50, offset=0):
        """ Execute a search

        :param query:          A query string.
        """
        return self.spotify.search(query, query_type, max_results, offset)

    #
    # Media
    #

    def get(self, uri):
        return self.spotify.objectFromURI(uri)

    def is_album_playable(self, album):
        """ Check if an album can be played by a client or not """
        return True

    def is_track_playable(self, track):
        """ Check if a track can be played by a client or not """
        return True

    #
    # Explore
    #

    def get_featured_playlists(self):
        return self.spotify.getFeaturedPlaylists()

    def get_top_playlists(self):
        return self.spotify.getTopPlaylists()

    def get_new_releases(self):
        return self.spotify.getNewReleases()

    def get_genres(self):
        return self.spotify.getGenres()

    def get_playlists_by_genre(self, genre_name):
        return self.spotify.getPlaylistsByGenre(genre_name)

    #
    # Discover
    #

    def discover(self):
        """ Return the user's stories """
        return self.spotify.discover()

    #
    # Radio
    #

    def get_radio_genres(self):
        return self.spotify.getRadioGenres()

    def get_radio_stations(self):
        return self.spotify.getRadioStations()

    def get_radio(self, radio_uri):
        radios = []
        if "spotify:genre:" in radio_uri:
            radios = self.spotify.getRadioGenres()
        else:
            radios = self.spotify.getRadioStations()

        for radio in radios:
            if radio.getURI() == radio_uri:
                return radio
        return self.spotify.newRadioStation(radio_uri)

    #
    # Playlists
    #

    def get_playlists(self):
        """ Return the user's playlists"""
        return self.spotify.getPlaylists()

    def get_starred(self):
        """ Return the user's starred tracks"""
        return self.get("spotify:user:%s:starred" % self.username)

    #
    # My Music
    #

    def get_my_albums(self):
        """ Return the user's albums"""
        return self.spotify.getMyMusic(type="albums")

    def get_my_artists(self):
        """ Return the user's artists"""
        return self.spotify.getMyMusic(type="artists")

    #
    #  Uri validation
    #
    def is_track_uri_valid(self, track_uri):
        return self.spotify.is_track_uri_valid(track_uri)
Beispiel #3
0
class SpotifyClient(object):
    audio_buffer_size = 50
    user_agent = PLUGIN_ID

    def __init__(self, username, password):
        """ Initializer

        :param username:       The username to connect to spotify with.
        :param password:       The password to authenticate with.
        """

        # Hook logging
        Logging.hook(3, Log.Debug)
        Logging.hook(2, Log.Info)
        Logging.hook(1, Log.Warn)
        Logging.hook(0, Log.Error)

        self.username = username
        self.spotify = Spotify(username, password, log_level=3)

    #
    # Public methods
    #

    def is_logged_in(self):
        return self.spotify.logged_in()

    def restart(self, username, password):
        return self.spotify.restart(username, password)

    def shutdown(self):
        self.spotify.shutdown()

    def search(self, query, query_type='all', max_results=50, offset=0):
        """ Execute a search

        :param query:          A query string.
        """
        return self.spotify.search(query, query_type, max_results, offset)

    #
    # Media
    #

    def get(self, uri):
        return self.spotify.objectFromURI(uri)

    def is_album_playable(self, album):
        """ Check if an album can be played by a client or not """
        return True

    def is_track_playable(self, track):
        """ Check if a track can be played by a client or not """
        return True

    #
    # Explore
    #

    def get_featured_playlists(self):
        return self.spotify.getFeaturedPlaylists()

    def get_top_playlists(self):
        return self.spotify.getTopPlaylists()

    def get_new_releases(self):
        return self.spotify.getNewReleases()

    def get_genres(self):
        return self.spotify.getGenres()

    def get_playlists_by_genre(self, genre_name):
        return self.spotify.getPlaylistsByGenre(genre_name)

    #
    # Discover
    #

    def discover(self):
        """ Return the user's stories """
        return self.spotify.discover()

    #
    # Radio
    #

    def get_radio_genres(self):
        return self.spotify.getRadioGenres()

    def get_radio_stations(self):
        return self.spotify.getRadioStations()

    def get_radio(self, radio_uri):
        radios = []
        if "spotify:genre:" in radio_uri:
            radios = self.spotify.getRadioGenres()
        else:
            radios = self.spotify.getRadioStations()

        for radio in radios:
            if radio.getURI() == radio_uri:
                return radio
        return self.spotify.newRadioStation(radio_uri)

    #
    # Playlists
    #

    def get_playlists(self):
        """ Return the user's playlists"""
        return self.spotify.getPlaylists()

    def get_starred(self):
        """ Return the user's starred tracks"""
        return self.get('spotify:user:%s:starred' % self.username)

    #
    # My Music
    #

    def get_my_albums(self):
        """ Return the user's albums"""
        return self.spotify.getMyMusic(type="albums")

    def get_my_artists(self):
        """ Return the user's artists"""
        return self.spotify.getMyMusic(type="artists")

    #
    #  Uri validation
    #
    def is_track_uri_valid(self, track_uri):
        return self.spotify.is_track_uri_valid(track_uri)