Top

spotify.v1.user.playlist module

from spotify import values
from spotify.object.followers import Followers
from spotify.object.image import Image
from spotify.page import Page
from spotify.resource import UpgradableInstance, Resource
from spotify.v1.user.playlist.follower import FollowerList
from spotify.v1.user.playlist.image import ImageList
from spotify.v1.user.playlist.track import PlaylistTrackList, PlaylistTrackPage


class PlaylistInstance(UpgradableInstance):

    def __init__(self, version, properties):
        super(PlaylistInstance, self).__init__(version, properties)
        self._context = PlaylistContext(self.version, self.owner.id, self.id)

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

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

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

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

    @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 owner(self):
        from spotify.v1.user import UserInstance
        return UserInstance(self.version, self.property('owner'))

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

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

    @property
    def tracks_(self):
        return PlaylistTrackPage(self.version, self.property('tracks'), 'items')

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

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

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

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

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

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


class PlaylistContext(Resource):

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

        self._followers = None
        self._images = None
        self._tracks = None

    @property
    def followers(self):
        if not self._followers:
            self._followers = FollowerList(self.version, self.user_id, self.id)

        return self._followers

    @property
    def images(self):
        if not self._images:
            self._images = ImageList(self.version, self.user_id, self.id)

        return self._images

    @property
    def tracks(self):
        if not self._tracks:
            self._tracks = PlaylistTrackList(self.version, self.user_id, self.id)

        return self._tracks

    def fetch(self, fields=values.UNSET, market=values.UNSET):
        params = values.of({
            'fields': fields,
            'market': market
        })
        response = self.version.request('GET', '/users/{}/playlists/{}'.format(self.user_id, self.id), params=params)
        return PlaylistInstance(self.version, response.json())

    def update(self, name=values.UNSET, public=values.UNSET, collaborative=values.UNSET, description=values.UNSET):
        data = values.of({
            'name': name,
            'public': public,
            'collaborative': collaborative,
            'description': description
        })
        response = self.version.request('PUT', '/users/{}/playlists/{}'.format(self.user_id, self.id), data=data)
        return response.status_code == 200

    def unfollow(self):
        response = self.version.request(
            'DELETE',
            '/users/{}/playlists/{}/followers'.format(self.user_id, self.id)
        )
        return response.status_code == 200

    def follow(self, public=values.UNSET):
        data = values.of({
            'public': public
        })
        response = self.version.request(
            'PUT',
            '/users/{}/playlists/{}/followers'.format(self.user_id, self.id),
            data=data
        )
        return response.status_code == 200


class PlaylistList(Resource):

    def __init__(self, version, user_id):
        super(PlaylistList, self).__init__(version)
        self.user_id = user_id

    def create(self, name, public=values.UNSET, collaborative=values.UNSET, description=values.UNSET):
        data = values.of({
            'name': name,
            'public': public,
            'collaborative': collaborative,
            'description': description
        })
        response = self.version.request('POST', '/users/{}/playlists'.format(self.user_id), data=data)
        return PlaylistInstance(self.version, response.json())

    def list(self, limit=values.UNSET, offset=values.UNSET):
        params = values.of({
            'limit': limit,
            'offset': offset
        })
        response = self.version.request('GET', '/users/{}/playlists'.format(self.user_id), params=params)
        return PlaylistPage(self.version, response.json(), 'items')

    def get(self, id):
        return PlaylistContext(self.version, self.user_id, id)


class PlaylistPage(Page):

    @property
    def instance_class(self):
        return PlaylistInstance

Classes

class PlaylistContext

class PlaylistContext(Resource):

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

        self._followers = None
        self._images = None
        self._tracks = None

    @property
    def followers(self):
        if not self._followers:
            self._followers = FollowerList(self.version, self.user_id, self.id)

        return self._followers

    @property
    def images(self):
        if not self._images:
            self._images = ImageList(self.version, self.user_id, self.id)

        return self._images

    @property
    def tracks(self):
        if not self._tracks:
            self._tracks = PlaylistTrackList(self.version, self.user_id, self.id)

        return self._tracks

    def fetch(self, fields=values.UNSET, market=values.UNSET):
        params = values.of({
            'fields': fields,
            'market': market
        })
        response = self.version.request('GET', '/users/{}/playlists/{}'.format(self.user_id, self.id), params=params)
        return PlaylistInstance(self.version, response.json())

    def update(self, name=values.UNSET, public=values.UNSET, collaborative=values.UNSET, description=values.UNSET):
        data = values.of({
            'name': name,
            'public': public,
            'collaborative': collaborative,
            'description': description
        })
        response = self.version.request('PUT', '/users/{}/playlists/{}'.format(self.user_id, self.id), data=data)
        return response.status_code == 200

    def unfollow(self):
        response = self.version.request(
            'DELETE',
            '/users/{}/playlists/{}/followers'.format(self.user_id, self.id)
        )
        return response.status_code == 200

    def follow(self, public=values.UNSET):
        data = values.of({
            'public': public
        })
        response = self.version.request(
            'PUT',
            '/users/{}/playlists/{}/followers'.format(self.user_id, self.id),
            data=data
        )
        return response.status_code == 200

Ancestors (in MRO)

Instance variables

var followers

var id

var images

var tracks

var user_id

Methods

def __init__(

self, version, user_id, id)

def __init__(self, version, user_id, id):
    super(PlaylistContext, self).__init__(version)
    self.user_id = user_id
    self.id = id
    self._followers = None
    self._images = None
    self._tracks = None

def fetch(

self, fields='UNSET', market='UNSET')

def fetch(self, fields=values.UNSET, market=values.UNSET):
    params = values.of({
        'fields': fields,
        'market': market
    })
    response = self.version.request('GET', '/users/{}/playlists/{}'.format(self.user_id, self.id), params=params)
    return PlaylistInstance(self.version, response.json())

def follow(

self, public='UNSET')

def follow(self, public=values.UNSET):
    data = values.of({
        'public': public
    })
    response = self.version.request(
        'PUT',
        '/users/{}/playlists/{}/followers'.format(self.user_id, self.id),
        data=data
    )
    return response.status_code == 200

def unfollow(

self)

def unfollow(self):
    response = self.version.request(
        'DELETE',
        '/users/{}/playlists/{}/followers'.format(self.user_id, self.id)
    )
    return response.status_code == 200

def update(

self, name='UNSET', public='UNSET', collaborative='UNSET', description='UNSET')

def update(self, name=values.UNSET, public=values.UNSET, collaborative=values.UNSET, description=values.UNSET):
    data = values.of({
        'name': name,
        'public': public,
        'collaborative': collaborative,
        'description': description
    })
    response = self.version.request('PUT', '/users/{}/playlists/{}'.format(self.user_id, self.id), data=data)
    return response.status_code == 200

class PlaylistInstance

class PlaylistInstance(UpgradableInstance):

    def __init__(self, version, properties):
        super(PlaylistInstance, self).__init__(version, properties)
        self._context = PlaylistContext(self.version, self.owner.id, self.id)

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

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

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

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

    @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 owner(self):
        from spotify.v1.user import UserInstance
        return UserInstance(self.version, self.property('owner'))

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

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

    @property
    def tracks_(self):
        return PlaylistTrackPage(self.version, self.property('tracks'), 'items')

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

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

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

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

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

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

Ancestors (in MRO)

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

Instance variables

var collaborative

var description

var external_urls

var follow

var followers

var href

var id

var images

var name

var owner

var public

var snapshot_id

var tracks

var tracks_

var type

var unfollow

var update

var uri

Methods

def __init__(

self, version, properties)

def __init__(self, version, properties):
    super(PlaylistInstance, self).__init__(version, properties)
    self._context = PlaylistContext(self.version, self.owner.id, 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 PlaylistList

class PlaylistList(Resource):

    def __init__(self, version, user_id):
        super(PlaylistList, self).__init__(version)
        self.user_id = user_id

    def create(self, name, public=values.UNSET, collaborative=values.UNSET, description=values.UNSET):
        data = values.of({
            'name': name,
            'public': public,
            'collaborative': collaborative,
            'description': description
        })
        response = self.version.request('POST', '/users/{}/playlists'.format(self.user_id), data=data)
        return PlaylistInstance(self.version, response.json())

    def list(self, limit=values.UNSET, offset=values.UNSET):
        params = values.of({
            'limit': limit,
            'offset': offset
        })
        response = self.version.request('GET', '/users/{}/playlists'.format(self.user_id), params=params)
        return PlaylistPage(self.version, response.json(), 'items')

    def get(self, id):
        return PlaylistContext(self.version, self.user_id, id)

Ancestors (in MRO)

Instance variables

var user_id

Methods

def __init__(

self, version, user_id)

def __init__(self, version, user_id):
    super(PlaylistList, self).__init__(version)
    self.user_id = user_id

def create(

self, name, public='UNSET', collaborative='UNSET', description='UNSET')

def create(self, name, public=values.UNSET, collaborative=values.UNSET, description=values.UNSET):
    data = values.of({
        'name': name,
        'public': public,
        'collaborative': collaborative,
        'description': description
    })
    response = self.version.request('POST', '/users/{}/playlists'.format(self.user_id), data=data)
    return PlaylistInstance(self.version, response.json())

def get(

self, id)

def get(self, id):
    return PlaylistContext(self.version, self.user_id, id)

def list(

self, limit='UNSET', offset='UNSET')

def list(self, limit=values.UNSET, offset=values.UNSET):
    params = values.of({
        'limit': limit,
        'offset': offset
    })
    response = self.version.request('GET', '/users/{}/playlists'.format(self.user_id), params=params)
    return PlaylistPage(self.version, response.json(), 'items')

class PlaylistPage

class PlaylistPage(Page):

    @property
    def instance_class(self):
        return PlaylistInstance

Ancestors (in MRO)

  • PlaylistPage
  • 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