Release 0.6.0
Breaking Changes
Playlist Class Hierarchy Refactor
The playlist class hierarchy has been redesigned for clearer separation of concerns:
Renamed Classes:
PlaylistCollection→Playlist(base protocol)SpotifyPlaylistCollection→SpotifyPlaylistTidalPlaylistCollection→TidalPlaylistPlexPlaylistCollection→PlexPlaylistNMLPlaylistCollection→NMLPlaylist
Library Classes Renamed:
SpotifyLibraryCollection→SpotifyLibraryTidalLibraryCollection→TidalLibraryPlexLibrarySectionCollection→PlexLibraryNMLLibraryCollection→NMLLibrary
New Abstractions:
OfflinePlaylist— In-memory playlist with no service synchronizationServicePlaylist— Base for playlists synchronized with music servicesMultiRequestServicePlaylist— For APIs requiring multi-request modificationsPlaylistIDs— 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 ofplistsync [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
allservicesdependency group to allow a loaded pip install with batteries included. - Added
plistsync --versioncommand to show the currently installed version of the library
Fixed
- Fixed lazy track loading when playlist has 0 tracks (
force=Truelogic 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