2.8.1
Note: 2.8.0 was skipped as it doesn't really exist; I accidently published 2.8.0 to PyPI a while back when testing out some publishing CI changes.
This is a summary of all changes since the 2.7.0 minor version update, rather than just the changes since 2.7.14.
Features
- Jinja templating for collection_playlists.yaml
- Use PlaylistName to separate the
tag_content(query) from the playlist name (see the docs for example usage)
Enhancements
- Add filtering and aggregation steps to combiner playlists in addition to tags playlists
- Rename "Other" playlist / folder to "Unused Tags"
- Remove pre-existing
playlist_builderplaylists - Parallelize audio export
- Retain playlist order when exporting audio
Docs
Fixes
- Failure when updating
tags_trackswithplaylist.get_tracks()when that playlist is actually a folder - Fixes for Python 3.9 - 3.12 and Windows compatibility
- Only run arg_parse function if executing from CLI or test suite (i.e. scripts shouldn't inadvertently trigger
arg_parsewhen reusing thebuild_configfunction) - Make
ARTIST_FIRSTa global config option so it can be set via the CLI for both sync and utils operations - When multiple playlists exist with the same name, it was possible for one or more of the playlists to be inadvertently removed from the output collection
- When ordinary operands and track sets were considered separately, the information about the order in which the different operand types appeared got lost resulting in incorrect evaluation
- Lower precision date inequalities weren't evaluated properly (e.g. {date:>2022} would match a track added any time after 2022-01-01 because
2022converted into a datetime object becomes 2022-01-01) - Globbing strings with * characters would match substrings as if implicit ^ and $ characters weren't being used -- use
matchinstead ofsearchand add implicit$character - MinimalDeepTechFilter should only be applied to playlists underneath a "Techno" or "House" playlist
- Upload log logic removing wrong files from the
logsdirectory - Handle errors decoding bytes from stdout when syncing (replace bytes that fail decoding with empty strings)
Build / CI
- Package renamed from
dj-beatcloudtodjtools - Deprecate Python 3.8
- A whole lot of linting, formatting, testing, and publishing changes
Script
- Insert newly added tracks into a Spotify playlist
- Print seconds offset of tracks' hot cues
- [Generate playlists by clustering tracks on tag data]
- Write tag data to collection from a Spotify playlist
- Sync local Collection data to a remote master Collection