Skip to content

Release 0.6.0

Choose a tag to compare

@github-actions github-actions released this 18 Apr 13:52

Breaking Changes

Playlist Class Hierarchy Refactor

The playlist class hierarchy has been redesigned for clearer separation of concerns:

Renamed Classes:

  • PlaylistCollectionPlaylist (base protocol)
  • SpotifyPlaylistCollectionSpotifyPlaylist
  • TidalPlaylistCollectionTidalPlaylist
  • PlexPlaylistCollectionPlexPlaylist
  • NMLPlaylistCollectionNMLPlaylist

Library Classes Renamed:

  • SpotifyLibraryCollectionSpotifyLibrary
  • TidalLibraryCollectionTidalLibrary
  • PlexLibrarySectionCollectionPlexLibrary
  • NMLLibraryCollectionNMLLibrary

New Abstractions:

  • OfflinePlaylist — In-memory playlist with no service synchronization
  • ServicePlaylist — Base for playlists synchronized with music services
  • MultiRequestServicePlaylist — For APIs requiring multi-request modifications
  • PlaylistIDs — Unified TypedDict for cross-service playlist identification

Method Changes:

Old New Notes
remote_edit() edit() Context manager for transactional edits
remote_delete() delete() Returns OfflinePlaylist with last state
remote_create() library.create_playlist() Factory method on library
remote_upsert() update() Bulk sync to remote
remote_associated Removed Service playlists always correspond to remote

Migration:

# Old
pl = SpotifyPlaylistCollection(library, "Name", "desc")
pl.remote_create()
with pl.remote_edit():
    pl.tracks.append(track)

# New
pl = library.create_playlist("Name", "desc")
with pl.edit():
    pl.tracks.append(track)
  • Auth commands are now available via plistsync auth [service] instead of plistsync [service] auth

Added

  • Split Playlist ABC into two classes: one for simple services, like filesystems, where states can be pushed via a single API call (PlaylistCollection) and one where multiple API calls are required (MultiRequestPlaylistCollection), e.g. when a playlists description cannot be pushed in the same call as track changes.
  • Added allservices dependency group to allow a loaded pip install with batteries included.
  • Added plistsync --version command to show the currently installed version of the library

Fixed

  • Fixed lazy track loading when playlist has 0 tracks (force=True logic in _load_tracks)
  • In rare cases, spotify playlists can contain invalid items, which do not appear in the web interface (but through the api). We now filter and remove them.
  • Fixed an issue with the spotify api returning duplicate playlists on pagination borders.
  • In rare cases, spotify playlists can contain invalid items, which do not appear in the web interface (but through the api). We now filter and remove them.

📦 PyPI: https://pypi.org/project/plistsync/0.6.0/

📁 Artifacts:

  • sdist: plistsync-0.6.0.tar.gz
  • wheel: plistsync-0.6.0-py3-none-any.whl