Release History

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning

1.0.0

Added

  • Custom API caching backend to replace dependency on requests-cache package. Currently only supports SQLite backend. More backends can be implemented in future if desired.

  • Cache settings for specific GET request endpoints on SpotifyAPI replacing need for per method use_cache parameter.

Changed

Fixed

  • Added missing variables to __slots__ definitions

  • Correctly applied __slots__ pattern to child classes. Now works as expected.

  • LocalTrack now copies tags as expected when calling copy.copy()

Removed

0.9.2

Added

  • REMOTE_SOURCES global variable in the libraries.remote module which lists the names of all the fully supported remote sources. Also, added the SOURCE_NAME global variable for the Spotify module.

Changed

  • FilterComparers now accepts a single Comparer on the comparers argument.

  • MusicBee class attributes were renamed to classify that full paths are also valid, not just filenames.

  • ItemDownloadHelper urls init arg now has default arg of empty tuple.

Documentation

  • Fixed error in β€˜sync data’ how-to.

Fixed

  • Comparer now considers strings as converted on first pass when converting expected values.

  • Printing of new line at the end of RemoteLibrary.extend()

0.9.1

Fixed

  • Bug in ItemMatcher.match() where operations always returned the last item in the given list of results

0.9.0

Added

  • RemoteAPI methods now accept RemoteResponse objects as input, refreshing them automatically

  • Property β€˜kind’ to all objects which have an associated RemoteObjectType

  • Introduced MusifyItemSettable class to allow distinction between items that can have their properties set and those that can’t

  • Extend FilterMatcher with group_by tag functionality

  • Now fully supports parsing of processors relating to XAutoPF objects with full I/O of settings to/from their related XML files on disk

  • Now supports creating new XAutoPF files from scratch without the file needing to already exist For XML values not directly controlled by Musify, users can use the β€˜default_xml’ class attribute to control the initial default values applied in this scenario

  • β€˜length’ property on MusifyCollection and implementation on all subclasses

Changed

Fixed

  • Comparer dynamic processor methods which process string values now cast expected types before processing

Removed

  • Redundant ShuffleBy enum and related arguments from ItemSorter

  • ItemProcessor and MusicBeeProcessor abstraction layers. No longer needed after some refactoring

  • get_filtered_playlists method from Library. This contained author specific logic and was not appropriate for general use

Documentation

  • Added info on lint checking for the contributing page

0.8.1

Changed

  • ItemSorter now accepts shuffle_weight between -1 and 1 instead of 0 and 1. This parameter’s logic has not yet been implemented so no changes to functionality have been made yet

  • Move get_filepaths() from LocalTrack to super class File

Documentation

  • References to python objects now link correctly

Fixed

  • Comments from LocalTrack metadata loading no longer gets wiped after setting URI on init

  • Tweaked assignment of description of IDv3 comment tags for MP3

  • align_string() function now handles combining unicode characters properly for fixed-width fonts

  • LocalTrack.get_filepaths() on LocalTrack no longer returns paths from $RECYCLE.BIN folders. These are deleted files and were causing the package to crash when trying to load them

  • PrettyPrinter.json() and PrettyPrinter._to_str() converts attribute keys to string to ensure safe json/str/repr output

  • FilterMatcher and FilterComparers now correctly import conditions from XML playlist files. Previously, these filters could not import nested match conditions from files. Changes to logic also made to Comparer.from_xml() to accommodate

  • XMLLibraryParser now handles empty arrays correctly. Previously would crash

  • Fixed Comparer dynamic process method alternate names for in_the_last and not_in_the_last

Removed

  • Abstract uri.setter method on Item

0.8.0

Added

Changed

  • Generating folders for a LocalLibrary now uses folder names as relative to the library folders of the LocalLibrary. This now supports nested folder structures better

  • Writing date tags to LocalTrack now supports partial dates of only YYYY-MM

  • Writing date tags to LocalTrack skips writing year, month, day tags if date tag already written

Removed

  • set_compilation_tags method removed from LocalFolder. This contained author specific logic and was not appropriate for general use

Fixed

  • ConnectionError catch in RequestHandler now handles correctly

  • Added safe characters and replacements for path conversion in MusicBee XMLLibraryParser. Now converts path to expected XML format correctly

  • FilterMatcher now handles β€˜&’ character correctly

  • SpotifyAPI now only requests batches of up to 20 items when getting albums. Now matches Spotify Web API specifications better

  • Loading of logging yaml config uses UTF-8 encoding now

  • Removed dependency on pytest-lazy-fixture. Package is broken for pytest >8.0. Replaced functionality with forked version of code

0.7.6

Fixed

  • Rename __max_str in local/collection.py to _max_str - functions could not see variable

  • Add default value of 0 to sort_key in ItemSorter.sort_by_field()

  • Fixed RemoteItemChecker _pause() logic to only get playlist name when input is not False-y

0.7.5

Added

Changed

  • Factor out logging handlers to their own script to avoid circular import issues

  • Abstract away input methods of RemoteItemChecker to InputProcessor base class

  • Factor out patch_input method to function in InputProcessor derived tests

Fixed

  • Captured stdout assertions in RemoteItemChecker tests re-enabled, now fixed

  • Surround RemoteAPI β€˜user’ properties in try-except block so they can still be pretty printed even if API is not authorised

Documentation

  • Fix redirect/broken links

  • Change notes text to proper rst syntax

0.7.4

Fixed

Documentation

  • Expand docstrings across entire package

  • Expand documentation with how to section, release history, and contributions pages

0.7.3

Changed

  • Remove x10 factor on bar threshold on _get_items_multi function in SpotifyAPI

Fixed

  • LocalTrack would break when trying to save tags for unmapped tag names, now handles correctly

0.7.2

Fixed

  • MusifyLogger would not get file_paths for parent loggers when propagate == True, now it does

0.7.1

Changed

Fixed

0.7.0

Added

Initial release! πŸŽ‰