Top

spotify.v1.artist module

from spotify.object.followers import Followers
from spotify.object.image import Image
from spotify.page import Page
from spotify.resource import Resource, UpgradableInstance
from spotify.v1.artist.album import AlbumList
from spotify.v1.artist.related_artist import RelatedArtistList
from spotify.v1.artist.top_track import TopTrackList


class ArtistContext(Resource):

    def __init__(self, version, id):
        super(ArtistContext, self).__init__(version)
        self.id = id

        self._albums = None
        self._top_tracks = None
        self._related_artists = None

    @property
    def albums(self):
        if not self._albums:
            self._albums = AlbumList(self.version, self.id)

        return self._albums

    @property
    def top_tracks(self):
        if not self._top_tracks:
            self._top_tracks = TopTrackList(self.version, self.id)

        return self.top_tracks

    @property
    def related_artists(self):
        if not self._related_artists:
            self._related_artists = RelatedArtistList(self.version, self.id)

        return self._related_artists

    def fetch(self):
        response = self.version.request('GET', '/artists/{}'.format(self.id))
        return ArtistInstance(self.version, response.json())


class ArtistInstance(UpgradableInstance):

    def __init__(self, version, properties):
        super(ArtistInstance, self).__init__(version, properties)
        self._context = ArtistContext(self.version, self.id)

    @property
    def external_urls(self):
        return self.property('external_urls')

    @property
    def followers(self):
        return Followers.from_json(self.property('followers'))

    @property
    def genres(self):
        return self.property('genres')

    @property
    def id(self):
        return self.property('id')

    @property
    def images(self):
        return [Image.from_json(image) for image in self.property('images')]

    @property
    def name(self):
        return self.property('name')

    @property
    def popularity(self):
        return self.property('popularity')

    @property
    def type(self):
        return self.property('type')

    @property
    def uri(self):
        return self.property('uri')

    @property
    def albums(self):
        return self._context.albums

    @property
    def top_tracks(self):
        return self._context.top_tracks

    @property
    def related_artists(self):
        return self._context.related_artists


class ArtistList(Resource):

    def get(self, id):
        return ArtistContext(self.version, id)

    def list(self, ids):
        response = self.version.request('GET', '/artists', params={
            'ids': ','.join(ids)
        })
        return ArtistPage(self.version, response.json(), 'artists')


class ArtistPage(Page):

    @property
    def instance_class(self):
        return ArtistInstance

Classes

class ArtistContext

class ArtistContext(Resource):

    def __init__(self, version, id):
        super(ArtistContext, self).__init__(version)
        self.id = id

        self._albums = None
        self._top_tracks = None
        self._related_artists = None

    @property
    def albums(self):
        if not self._albums:
            self._albums = AlbumList(self.version, self.id)

        return self._albums

    @property
    def top_tracks(self):
        if not self._top_tracks:
            self._top_tracks = TopTrackList(self.version, self.id)

        return self.top_tracks

    @property
    def related_artists(self):
        if not self._related_artists:
            self._related_artists = RelatedArtistList(self.version, self.id)

        return self._related_artists

    def fetch(self):
        response = self.version.request('GET', '/artists/{}'.format(self.id))
        return ArtistInstance(self.version, response.json())

Ancestors (in MRO)

Instance variables

var albums

var id

var related_artists

var top_tracks

Methods

def __init__(

self, version, id)

def __init__(self, version, id):
    super(ArtistContext, self).__init__(version)
    self.id = id
    self._albums = None
    self._top_tracks = None
    self._related_artists = None

def fetch(

self)

def fetch(self):
    response = self.version.request('GET', '/artists/{}'.format(self.id))
    return ArtistInstance(self.version, response.json())

class ArtistInstance

class ArtistInstance(UpgradableInstance):

    def __init__(self, version, properties):
        super(ArtistInstance, self).__init__(version, properties)
        self._context = ArtistContext(self.version, self.id)

    @property
    def external_urls(self):
        return self.property('external_urls')

    @property
    def followers(self):
        return Followers.from_json(self.property('followers'))

    @property
    def genres(self):
        return self.property('genres')

    @property
    def id(self):
        return self.property('id')

    @property
    def images(self):
        return [Image.from_json(image) for image in self.property('images')]

    @property
    def name(self):
        return self.property('name')

    @property
    def popularity(self):
        return self.property('popularity')

    @property
    def type(self):
        return self.property('type')

    @property
    def uri(self):
        return self.property('uri')

    @property
    def albums(self):
        return self._context.albums

    @property
    def top_tracks(self):
        return self._context.top_tracks

    @property
    def related_artists(self):
        return self._context.related_artists

Ancestors (in MRO)

  • ArtistInstance
  • spotify.resource.UpgradableInstance
  • spotify.resource.Instance
  • spotify.resource.Resource
  • __builtin__.object

Instance variables

var albums

var external_urls

var followers

var genres

var href

var id

var images

var name

var popularity

var related_artists

var top_tracks

var type

var uri

Methods

def __init__(

self, version, properties)

def __init__(self, version, properties):
    super(ArtistInstance, self).__init__(version, properties)
    self._context = ArtistContext(self.version, self.id)

def property(

self, name, default=None)

def property(self, name, default=None):
    prop = super(UpgradableInstance, self).property(name)
    if prop:
        return prop
    self.upgrade()
    return super(UpgradableInstance, self).property(name)

def upgrade(

self)

def upgrade(self):
    response = self.version.client.request('GET', self.href)
    self.properties = response.json()

class ArtistList

class ArtistList(Resource):

    def get(self, id):
        return ArtistContext(self.version, id)

    def list(self, ids):
        response = self.version.request('GET', '/artists', params={
            'ids': ','.join(ids)
        })
        return ArtistPage(self.version, response.json(), 'artists')

Ancestors (in MRO)

  • ArtistList
  • spotify.resource.Resource
  • __builtin__.object

Methods

def __init__(

self, version)

def __init__(self, version):
    self.version = version

def get(

self, id)

def get(self, id):
    return ArtistContext(self.version, id)

def list(

self, ids)

def list(self, ids):
    response = self.version.request('GET', '/artists', params={
        'ids': ','.join(ids)
    })
    return ArtistPage(self.version, response.json(), 'artists')

class ArtistPage

class ArtistPage(Page):

    @property
    def instance_class(self):
        return ArtistInstance

Ancestors (in MRO)

  • ArtistPage
  • spotify.page.Page
  • spotify.resource.Resource
  • __builtin__.object

Instance variables

var instance_class

Methods

def __init__(

self, version, data, key)

def __init__(self, version, data, key):
    super(Page, self).__init__(version)
    self._key = key
    self._items = iter([self.instance_class(self.version, item) for item in data.get(key, [])])
    del data[key]
    self._meta = data

def has_next_page(

self)

def has_next_page(self):
    return 'next' in self._meta and self._meta['next'] is not None

def next_page(

self)

def next_page(self):
    response = self.version.request(self._meta['next'])
    return self.__class__(
        self.version,
        response.json(),
        self._key
    )

Sub-modules