beets/test/plugins
Max Goltzsche 5d96509cfe
smartplaylist: change encoding of additional field
URL-encode additional item `fields` within generated EXTM3U playlists instead of JSON-encoding them.
This is because JSON-encoding additional fields/attributes made it difficult to parse the `EXTINF` line but using URL-encoding for these values makes parsing easy (because URL-encoded values cannot contain commas, quotation marks and spaces).

I introduced the generation of additional EXTM3U item fields earlier this year and I want to correct that now.

**Design/definition background:**
Unfortunately, I didn't find a clear definition of how additional playlist item attributes should be encoded - apparently there is none.
Given that item URIs within an M3U playlist can be URL-encoded already, defining the values of additional attributes to be URL-encoded is consistent design.
I didn't find examples of additional EXTM3U item attributes in the web where the attribute value contains a comma, space or quotation mark but examples that specified numeric IDs and URLs as attribute values.
Because the URL attribute examples I found didn't contain URL-encoded characters and because it is more readable and unproblematic for parsing, I've let the attribute URL encoding treat `:` and `/` as safe characters.

**Breaking change:**
While this is a breaking change in theory, in practice it is not since afaik all integrations of the smartplaylist plugin's additional EXTM3U item attribute generation feature (beets-webm3u) work with simple attribute values such as the item ID (numeric) whose formatting/encoding is not affected when changing from JSON to URL-encoding.
In other words the change is backward-compatible with the beets-webm3u plugin (which I'll adjust correspondingly after this beets PR was merged).
2025-02-01 01:14:27 +01:00
..
__init__.py Correctly refactor tests 2023-10-17 19:39:03 +10:00
lyrics_pages.py Google: add support for dainuzodziai.lt 2025-01-27 10:56:53 +00:00
test_acousticbrainz.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_advancedrewrite.py Update CI config, minimum ruff version, docs and add changelog note 2024-12-10 06:10:03 +00:00
test_albumtypes.py Update deprecated imports 2024-12-10 06:10:04 +00:00
test_art.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_aura.py Use PEP585 lowercase collections typing annotations 2024-12-10 06:10:03 +00:00
test_autobpm.py Skip autobpm tests if librosa isn't available 2024-11-30 09:32:08 -04:00
test_bareasc.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_beatport.py Use f-string syntax 2024-08-16 17:47:23 +01:00
test_bucket.py Future proof BucketPluginTest.test_year_single_year_last_folder 2024-12-27 16:28:38 -04:00
test_convert.py Fix lints 2024-10-30 12:13:30 +00:00
test_discogs.py Fixes TypeError in the Discogs plugin (#5415) 2024-09-19 21:27:16 +01:00
test_edit.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_embedart.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_embyupdate.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_export.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_fetchart.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_filefilter.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_ftintitle.py Remove redundant unit tests for ftintitle plugin 2024-10-01 15:55:38 -05:00
test_hook.py Move imports required for typing under the TYPE_CHECKING block 2024-12-10 06:10:04 +00:00
test_ihate.py Replace assertFalse 2024-08-12 08:43:41 +01:00
test_importadded.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_importfeeds.py Replace assertIn 2024-08-12 08:43:42 +01:00
test_info.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_ipfs.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_keyfinder.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_lastgenre.py Fix a lastgenre test 2025-01-22 18:20:41 +01:00
test_limit.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_lyrics.py Do not search for Various Artists, split titles by ' / ' 2025-01-27 10:56:53 +00:00
test_mbsubmit.py Replace assertIn 2024-08-12 08:43:42 +01:00
test_mbsync.py Remove redundant generate_album_info and generate_track_info functions 2024-10-16 06:39:30 +01:00
test_mpdstats.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_parentwork.py Introduce integration_test marker and update testing docs 2024-09-21 13:26:05 +01:00
test_permissions.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_play.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_player.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_playlist.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_plexupdate.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_plugin_mediafield.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_random.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_replaygain.py Replace assertAlmostEqual 2024-08-12 08:49:30 +01:00
test_smartplaylist.py smartplaylist: change encoding of additional field 2025-02-01 01:14:27 +01:00
test_spotify.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_subsonicupdate.py Remove def suite TestLoader definitions 2024-07-28 18:58:51 +01:00
test_substitute.py Apply substitute rules in sequence 2024-10-16 16:36:36 +02:00
test_the.py Replace assertEqual 2024-08-12 08:43:42 +01:00
test_thumbnails.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_types_plugin.py Replace assertRaises 2024-08-12 08:43:42 +01:00
test_web.py Replace assertCountEqual 2024-08-12 08:43:43 +01:00
test_zero.py Update CI config, minimum ruff version, docs and add changelog note 2024-12-10 06:10:03 +00:00