Changes

v1.12 (2015-01-16)

This version is compatible with libspotify version 12.

This is the first release in 18 months, including only minor improvements accumulated during the first eight months. Development focus has for a long time been on pyspotify 2 which is in beta and is fully usable.

New features

Other changes

  • For developers: In pyspotify 1.7 we split out our mock version of libspotify to an independent project, libmockspotify. We’ve now reverted this, and a copy of the source code of libmockspotify 0.3.1 is included in the pyspotify repo. libmockspotify is deprecated, and from now on we maintain whatever libspotify mocks we need for pyspotify development in the pyspotify repo.

    To be able to run the tests, you still need to pass --with-mock to your python setup.py ... command to build pyspotify with mock support. Alternatively, you can use fab test to build pyspotify and run the tests.

  • Jukebox example code cleaned up. It now has better error handling and you can select the audio sink to use. Changed to using argparse (requires Python >= 2.7). Please use the -? command line option to get more information.

v1.11 (2013-07-01)

This version is compatible with libspotify version 12.

API changes

New features

Code cleanups

  • Fixed formatting and style of entire C code base with exception of mock code.
  • Fixed multiple Python reference count bugs found by using gcc-python-plugin and manual inspection.
  • Fixed multiple libspotify reference count bugs by forcing all *_FromSpotify calls to specify if a reference needs to be added or not. Also audited for corresponding release calls.
  • Converted all malloc/free calls to use the Python allocator. Also audited for missing free calls and marked outstanding issues with TODOs (only playlistcontainer callbacks remain as known issues).
  • Simplified session callback handling by creating a common callback handler.
  • Added <Object>_SP_<OBJECT> macros to hide access to the internal sp_* pointers.
  • Switched to being strict about avoiding Py_XDECREF and making sure we check for NULL.
  • Switched to proper debug_printf macro that always ends up in code but optimized out so we never have broken debug printing.
  • Switched to using existing helpers inside the <Object>_str functions instead of duplicating code.
  • Return boolean values in API calls that have bool return values.
  • Simplify session creation code and add helpers for building session configs.
  • Switch to using PyErr_SetNone for errors without a description.
  • Use PyArg_Parse* type format strings for argument handling and refcount handling in most of the callback code.
  • Ensure all encoded strings are freed after use.
  • Reuse single callback function for “simple” playlist callbacks.

v1.10 (2012-12-12)

This version is compatible with libspotify version 12.

API changes

New features

  • Split session creation and user login. The session must be created only once per process. After that, the application can connect and disconnect a user at will. (Fixes: #73)

    New methods: Session.create(), Session.relogin(), Session.logout().

    The Session object now calls manager.SpotifySessionManager._manager_logged_out() when getting a logged_out event from libspotify, or manager.SpotifySessionManager.logged_out if the former is not defined.

v1.9.1 (2012-11-23)

This version, like 1.9, is compatible with libspotify version 12.

Bug fixes

  • Fixed memory leak caused by the from_* methods on spotify.Link. The memory leak was introduced in v1.2 in June 2011, so all users should really update to this version.

v1.9 (2012-11-20)

This version, like 1.8, is compatible with libspotify version 12.

New features

v1.8.1 (2012-11-04)

Minor fix to ease Debian package building:

  • Replace Makefile used as a development convenience with Fabric and fabfile.py, so that debhelper doesn’t think the project is built using make.

v1.8 (2012-11-04)

Updated to work with libspotify version 12:

  • sp_album_cover requires a preferred image size. For now, it’s hard coded to SP_IMAGE_SIZE_NORMAL. Thanks to olle. (Fixes: #66)

Since the above API change to libspotify isn’t reflected in the pyspotify API yet, there are no API changes between v1.7.1 and 1.8.

v1.7.1 (2012-09-07)

Maintenance release to fix a login issue experienced by some users.

This version, like 1.7, is compatible with libspotify version 11.

Bug fixes

  • Fix bogus comparision of pointers. This caused SpotifyError: No credentials stored for some users. (Fixes: #65)
  • Fix wrong return type in the Playlist.remove_tracks() docs.
  • Remove unused include of pthread.h, which caused warnings from lintian.

v1.7 (2012-04-22)

API changes

New features

Other changes

  • For developers: pyspotify now uses libmockspotify for its mocking needs. The mock module only contains Python bindings to the libmockspotify API. To be able to run the tests, you need to pass --with-mock to your python setup.py ... command to build pyspotify with mock support. Alternatively, you can use make test to run the tests.

v1.6.1 (2011-12-29)

Maintenance release to fix a segfault for some users of playlist folders.

Bug fixes

v1.6 (2011-11-29)

Updated to work with libspotify 10.1.16.

API changes

  • Session.is_available(track) has been moved to spotify.Track.availability(), and returns a detailed availability status of the track.
  • Session.is_local(track) is now spotify.Track.is_local(), and returns a boolean.
  • Removed methods: Session.get_friends, User.full_name, User.picture, and User.relation, as they was removed from the libspotify API.

New features

v1.5 (2011-10-30)

Updated to work with libspotify 9.1.32.

New features

v1.4 (2011-09-24)

pyspotify v1.4 only works with libspotify v0.0.8. As libspotify v9.x has been released, this release of pyspotify will probably be the last release to work with libspotify v0.0.8.

API changes

  • All callbacks with optional userdata are now called with the userdata parameter set to None, which means they are called with the same number of parameters every time.
  • Messages from the Spotify service (log and user) have been converted to unicode objects.

New features

Bug fixes

v1.3 (2011-06-11)

It has only been four days since the v1.2 release, but we would like to get the change from bytestrings to unicode objects released before more projects start using pyspotify, as this change is really backwards incompatible.

  • All strings returned by pyspotify has been changed from UTF-8 encoded bytestrings to unicode objects.
  • Track autolinking enabled for all playlists.
  • Add spotify.__version__ which exposes the current pyspotify version. The API version of the libspotify used is already available as spotify.api_version.

v1.2 (2011-06-07)

As of May 2011, Doug Winter transfered the maintenance of pyspotify to the Mopidy project. The Mopidy developers, which depends upon pyspotify, have during the first half of 2011 been maintaining a branch of pyspotify and related Debian packages, and done some unofficial releases. With this change, we hope to get pyspotify up to speed again, and make it a useful library both for Mopidy and other projects.

Lately, Antoine Pierlot-Garcin aka bok have been doing lots of work on pyspotify, both on catching up with the features of libspotify, fixing and extending the test suite, writing documentation, and on fixing bugs. A big thanks to him!

  • Upgraded to libspotify 0.0.8
  • New managers: SpotifyPlaylistManager and SpotifyContainerManager giving access to all the Playlist{,Container} callbacks
  • Artist and Album browsing available. Contributed by Jamie Kirkpatrick.
  • Added a method to stop the playback. Contributed by Jamie Kirkpatrick.
  • Better error messages when not logged in and accessing user information
  • Added support for a playlist of all starred tracks
  • Get/Set starred status for a track
  • Better memory management

v1.1+mopidy20110405 (2011-04-05)

Unofficial release by the Mopidy developers.

  • Exposed the track_is_local() check function. Contributed by Jamie Kirkpatrick.
  • Fixed incorrect calls to determine track availability/locality. Contributed by Jamie Kirkpatrick.

v1.1+mopidy20110331 (2011-03-31)

Unofficial release by the Mopidy developers.

  • Pass error messages instead of error codes to session callbacks. Contributed by Antoine Pierlot-Garcin.
  • Fixed an issue where all playlists would appar blank when starting up. Contributed by Jamie Kirkpatrick.
  • Make new config flags default to 0. Thanks to Jamie Kirkpatrick and Antoine Pierlot-Garcin.

v1.1+mopidy20110330 (2011-03-30)

Unofficial release by the Mopidy developers.

  • Further updates for libspotify 0.0.7 support. Contributed by Antoine Pierlot-Garcin.

v1.1+mopidy20110223 (2011-02-23)

Unofficial release by the Mopidy developers.

  • Upgraded to libspotify 0.0.7. Contributed by Antoine Pierlot-Garcin.

v1.1+mopidy20110106 (2011-01-06)

Unofficial release by the Mopidy developers.

  • Upgraded to libspotify 0.0.6
  • Add OSS support for sound output
  • Add is_collaborative to playlists
  • Add tracks_added playlist callback
  • Add removed and moved callbacks for playlists
  • Add remove_tracks to playlists
  • Add seek support by mapping sp_session_player_seek
  • Add support to set preferred bitrate
  • Fix a segfault. Thanks to Valentin David.

v1.1 (2010-04-25)

Last release by Doug Winter.

  • Upgraded to libspotify 0.0.4
  • See the git history for changes up to v1.1.

Contributors to pyspotify up until v1.1 includes:

  • Doug Winter
  • Stein Magnus Jodal
  • Thomas Jost
  • Ben Firshman
  • Johannes Knutsen