Top

spotify.v1.user.playlist.track module

from spotify import values
from spotify.object.snapshot import Snapshot
from spotify.page import Page
from spotify.resource import Instance, Resource


class PlaylistTrackInstance(Instance):

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

    @property
    def added_by(self):
        from spotify.v1.user import UserInstance
        return UserInstance(self.version, self.property('added_by'))

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

    @property
    def track(self):
        from spotify.v1.track import TrackInstance
        return TrackInstance(self.version, self.property('track'))


class PlaylistTrackList(Resource):

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

    def add(self, uris=values.UNSET, position=values.UNSET):
        data = values.of({
            'uris': uris,
            'position': position
        })
        response = self.version.request(
            'POST',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return Snapshot.from_json(response.json())

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

    def remove(self, tracks=values.UNSET, positions=values.UNSET, snapshot_id=values.UNSET):
        data = values.of({
            'tracks': tracks,
            'positions': positions,
            'snapshot_id': snapshot_id
        })
        response = self.version.request(
            'DELETE',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return Snapshot.from_json(response.json())

    def reorder(self, range_start, insert_before, range_length=values.UNSET, snapshot_id=values.UNSET):
        data = values.of({
            'range_start': range_start,
            'insert_before': insert_before,
            'range_length': range_length,
            'snapshot_id': snapshot_id
        })
        response = self.version.request(
            'PUT',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return Snapshot.from_json(response.json())

    def replace(self, uris=values.UNSET):
        data = values.of({
            'uris': uris
        })
        response = self.version.request(
            'PUT',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return response.status_code == 201


class PlaylistTrackPage(Page):

    @property
    def instance_class(self):
        return PlaylistTrackInstance

Classes

class PlaylistTrackInstance

class PlaylistTrackInstance(Instance):

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

    @property
    def added_by(self):
        from spotify.v1.user import UserInstance
        return UserInstance(self.version, self.property('added_by'))

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

    @property
    def track(self):
        from spotify.v1.track import TrackInstance
        return TrackInstance(self.version, self.property('track'))

Ancestors (in MRO)

Instance variables

var added_at

var added_by

var is_local

var track

Methods

def __init__(

self, version, properties)

def __init__(self, version, properties):
    super(Instance, self).__init__(version)
    self.properties = properties

def property(

self, name, default=None)

def property(self, name, default=None):
    return self.properties.get(name, default)

class PlaylistTrackList

class PlaylistTrackList(Resource):

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

    def add(self, uris=values.UNSET, position=values.UNSET):
        data = values.of({
            'uris': uris,
            'position': position
        })
        response = self.version.request(
            'POST',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return Snapshot.from_json(response.json())

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

    def remove(self, tracks=values.UNSET, positions=values.UNSET, snapshot_id=values.UNSET):
        data = values.of({
            'tracks': tracks,
            'positions': positions,
            'snapshot_id': snapshot_id
        })
        response = self.version.request(
            'DELETE',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return Snapshot.from_json(response.json())

    def reorder(self, range_start, insert_before, range_length=values.UNSET, snapshot_id=values.UNSET):
        data = values.of({
            'range_start': range_start,
            'insert_before': insert_before,
            'range_length': range_length,
            'snapshot_id': snapshot_id
        })
        response = self.version.request(
            'PUT',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return Snapshot.from_json(response.json())

    def replace(self, uris=values.UNSET):
        data = values.of({
            'uris': uris
        })
        response = self.version.request(
            'PUT',
            '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
            data=data
        )
        return response.status_code == 201

Ancestors (in MRO)

Instance variables

var playlist_id

var user_id

Methods

def __init__(

self, version, user_id, playlist_id)

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

def add(

self, uris='UNSET', position='UNSET')

def add(self, uris=values.UNSET, position=values.UNSET):
    data = values.of({
        'uris': uris,
        'position': position
    })
    response = self.version.request(
        'POST',
        '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
        data=data
    )
    return Snapshot.from_json(response.json())

def list(

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

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

def remove(

self, tracks='UNSET', positions='UNSET', snapshot_id='UNSET')

def remove(self, tracks=values.UNSET, positions=values.UNSET, snapshot_id=values.UNSET):
    data = values.of({
        'tracks': tracks,
        'positions': positions,
        'snapshot_id': snapshot_id
    })
    response = self.version.request(
        'DELETE',
        '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
        data=data
    )
    return Snapshot.from_json(response.json())

def reorder(

self, range_start, insert_before, range_length='UNSET', snapshot_id='UNSET')

def reorder(self, range_start, insert_before, range_length=values.UNSET, snapshot_id=values.UNSET):
    data = values.of({
        'range_start': range_start,
        'insert_before': insert_before,
        'range_length': range_length,
        'snapshot_id': snapshot_id
    })
    response = self.version.request(
        'PUT',
        '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
        data=data
    )
    return Snapshot.from_json(response.json())

def replace(

self, uris='UNSET')

def replace(self, uris=values.UNSET):
    data = values.of({
        'uris': uris
    })
    response = self.version.request(
        'PUT',
        '/users/{}/playlists/{}/tracks'.format(self.user_id, self.playlist_id),
        data=data
    )
    return response.status_code == 201

class PlaylistTrackPage

class PlaylistTrackPage(Page):

    @property
    def instance_class(self):
        return PlaylistTrackInstance

Ancestors (in MRO)

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
    )