Source code for asyncspotify.user

from .mixins import ExternalURLMixin, ImageMixin
from .object import SpotifyObject


class _BaseUser(SpotifyObject, ExternalURLMixin, ImageMixin):
	_type = 'user'

	def __init__(self, client, data):
		super().__init__(client, data)

		ExternalURLMixin.__init__(self, data)
		ImageMixin.__init__(self, data)

		self.display_name = data.pop('display_name')
		self.name = self.display_name

		followers = data.get('followers', None)
		self.follower_count = None if followers is None else followers['total']

	async def playlists(self):
		'''
		Get the users playlists.
		
		Alias of :meth:`Client.get_user_playlists`
		'''

		return await self._client.get_user_playlists(self.id)


[docs]class PublicUser(_BaseUser): ''' Represents a User object. id: str Spotify ID of the user. name: str Name of the user. Also aliased to the ``display_name`` attribute. images: List[:class:`Image`] List of associated images, such as the users profile picture. uri: str Spotify URI of the user. link: str Spotify URL of the user. follower_count: int or None Follower count of the user. external_urls: dict Dictionary that maps type to url. '''
[docs]class PrivateUser(_BaseUser): ''' Represents a private User object, usually fetched through the ``me`` endpoint. This type has some additional attributes not existent in :class:`PublicUser`. country: str ISO-3166-1_ code of users country. email: str Email of user. Please do not this email is note necessarily verified by Spotify. product: str Users Spotify subscription level, could be ``free``, ``open`` or ``premium``. ``free`` and ``open`` are synonyms. ''' def __init__(self, client, data): super().__init__(client, data) # this seems to have been removed from the api listing? #self.birthdate = data.pop('birthdate', None) self.country = data.pop('country', None) self.email = data.pop('email', None) self.product = data.pop('product', None)
[docs] async def top_tracks(self, limit=20, offset=None, time_range=None): ''' Gets the top tracks of the current user. Requires scope ``user-top-read``. :param int limit: How many tracks to return. Maximum is 50. :param int offset: The index of the first result to return. :param str time_range: The time period for which data are selected to form a top. Valid values for ``time_range`` - ``long_term`` (calculated from several years of data and including all new data as it becomes available), - ``medium_term`` (approximately last 6 months), - ``short_term`` (approximately last 4 weeks). :return: List[:class:`SimpleTrack`] ''' return await self._client.get_me_top_tracks(limit=limit, offset=offset, time_range=time_range)
[docs] async def top_artists(self, limit=20, offset=None, time_range=None): ''' Get the top artists of the current user. :param int limit: How many artists to return. Maximum is 50. :param int offset: The index of the first result to return. :param str time_range: The time period for which data are selected to form a top. Valid values for ``time_range`` - ``long_term`` (calculated from several years of data and including all new data as it becomes available), - ``medium_term`` (approximately last 6 months), - ``short_term`` (approximately last 4 weeks). :return: List[:class:`SimpleArtist`] ''' return await self._client.get_me_top_artists(limit=limit, offset=offset, time_range=time_range)
[docs] async def create_playlist(self, name, public=False, collaborative=False, description=None): ''' Create a new playlist. :param str name: Name of the new playlist. :param str description: Description of the new playlist. :param bool public: Whether the playlist should be public. :param bool collaborative: Whether the playlist should be collaborative (anyone can edit it). :return: A :class:`FullPlaylist` instance. ''' return await self._client.create_playlist( user=self.id, name=name, public=public, collaborative=collaborative, description=description )