Source code for spotify.user

from __future__ import unicode_literals

import spotify
from spotify import ffi, lib, serialized, utils

__all__ = ["User"]


[docs]class User(object): """A Spotify user. You can get users from the session, or you can create a :class:`User` yourself from a Spotify URI:: >>> session = spotify.Session() # ... >>> user = session.get_user('spotify:user:jodal') >>> user.load().display_name u'jodal' """ def __init__(self, session, uri=None, sp_user=None, add_ref=True): assert uri or sp_user, "uri or sp_user is required" self._session = session if uri is not None: user = spotify.Link(self._session, uri=uri).as_user() if user is None: raise ValueError("Failed to get user from Spotify URI: %r" % uri) sp_user = user._sp_user add_ref = True if add_ref: lib.sp_user_add_ref(sp_user) self._sp_user = ffi.gc(sp_user, lib.sp_user_release) def __repr__(self): return "User(%r)" % self.link.uri @property @serialized def canonical_name(self): """The user's canonical username.""" return utils.to_unicode(lib.sp_user_canonical_name(self._sp_user)) @property @serialized def display_name(self): """The user's displayable username.""" return utils.to_unicode(lib.sp_user_display_name(self._sp_user)) @property def is_loaded(self): """Whether the user's data is loaded yet.""" return bool(lib.sp_user_is_loaded(self._sp_user)) def load(self, timeout=None): """Block until the user's data is loaded. After ``timeout`` seconds with no results :exc:`~spotify.Timeout` is raised. If ``timeout`` is :class:`None` the default timeout is used. The method returns ``self`` to allow for chaining of calls. """ return utils.load(self._session, self, timeout=timeout) @property def link(self): """A :class:`Link` to the user.""" return spotify.Link( self._session, sp_link=lib.sp_link_create_from_user(self._sp_user), add_ref=False, ) @property def starred(self): """The :class:`Playlist` of tracks starred by the user.""" return self._session.get_starred(self.canonical_name) @property def published_playlists(self): """The :class:`PlaylistContainer` of playlists published by the user.""" return self._session.get_published_playlists(self.canonical_name)