641 Commits

Author SHA1 Message Date
Šarūnas Nejus
30ab81eb5b Extract UserError from beets.ui to a new beets.exceptions module.
Update all references in core, plugins, and tests to import UserError
from the new location. This centralizes exception handling and improves
code organization.
2026-05-16 11:18:51 +01:00
Sebastian Mohr
cf97ce87b8 Refactored test_mb_sync to use pytest and removed capture_log in favor
of caplog.
2026-05-14 15:47:00 +02:00
ShimmerGlass
65ccaf1408 fix(mbsync): do not clear metadata if import.from_scratch is set
if import.from_scratch was set in the config, runnning mbsync would
clear any metadata not provided by MBz (replay gain, lyrics, genres...).
we now ignore this setting when running mbsync to preserve metadata.

Fixes: #6613
2026-05-13 18:06:08 +02:00
ShimmerGlass
ec1c25644d fix(duplicates): output format
* the pugin used an empty format string unless --count was provided,
  resulting in outputs like `: 1`. it now correctly displays duplicated
  items.
* --count was ignored (aside from above bug), and item count was always
  appended to output.
2026-05-11 22:43:53 +02:00
J0J0 Todos
5f94ca79a3 lastgenre: Test empty last.fm result doesnt wipe
Add a test case that proves that issue 5991 is fixed by now.
2026-05-09 09:11:05 +02:00
Šarūnas Nejus
cde2dd139e Merge branch 'master' into fix/mbpseudo-raw-data 2026-05-08 13:38:30 +01:00
Sebastian Mohr
2056cce74b test_hook: Removed capture_log in favor for pytest caplog
Also minor refactor to align with pytest
2026-05-08 13:47:37 +02:00
Martin Caspersen
5342d9bc76 Merge remote-tracking branch 'fork/master' into fix/mbpseudo-raw-data 2026-05-08 12:25:49 +02:00
Šarūnas Nejus
b15006ca11 Remove dependency on global config 2026-05-06 15:30:10 +01:00
Šarūnas Nejus
10d0f37793 Merge branch 'master' into fix/badfiles-quiet-mode 2026-05-02 22:35:41 +01:00
ShimmerGlass
cc63a4e9b9 fix(MusicBrainz): date parsing fix
Correctly handle release dates where leading or
intermediate components are missing, e.g. 2008-??-02
2026-05-02 16:26:48 +02:00
Eyüp Can Akman
382ec79fe0 badfiles: address review feedback 2026-05-01 17:01:47 +03:00
Eyüp Can Akman
811593a1ee badfiles: respect import.quiet during import hook
The import hook prompted for input even when quiet mode was active, so
non-interactive imports blocked on the corrupt-file dialog. Return early
from `on_import_task_before_choice` when `import.quiet` is set so the
importer falls back to its summary judgment.
2026-05-01 17:01:47 +03:00
Sebastian Mohr
d6245835f2 test_discogs: Removed capture_log in favor for pytest caplog 2026-04-30 19:56:31 +02:00
Sebastian Mohr
a8db8931b7 test_playcount: Removed capture_log in favor for pytest caplog 2026-04-30 14:41:25 +02:00
Sebastian Mohr
9bae5b8fcb test_autobpm: Removed capture_log in favor for pytest caplog 2026-04-30 14:41:25 +02:00
Alok Saboo
e84ce4198a Revert unrelated docstring reformatting 2026-04-29 08:33:31 -04:00
Alok Saboo
f459edbbd4 Merge upstream master and fix changelog.rst
Sync with upstream beets/master and resolve changelog conflict,
keeping only the Spotify batch entry in the Unreleased section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:12:30 -04:00
Eyüp Can Akman
88be3023bb lyrics: handle apostrophes in musixmatch slug
The musixmatch URL slug builder did not replace curly apostrophes
(U+2018, U+2019) before applying the whitespace-to-dash rule, so titles
like "If They're Shooting at You" produced a slug with the raw quote
preserved and the lookup failed.

Add a REPLACEMENTS entry that maps both curly quote codepoints to a
dash before the rest of the substitutions run.
2026-04-28 17:27:28 +03:00
Alok Saboo
4ddef8cda6 Merge branch 'master' into spotify_batch 2026-04-26 09:47:58 -04:00
Šarūnas Nejus
8809de2f7b Define set_item_uri 2026-04-25 20:29:16 +01:00
Šarūnas Nejus
50afcea6e9 Simplify get_playlist_items 2026-04-25 20:29:16 +01:00
shara987
ba48bf8480 zero: fix ruff formatting 2026-04-25 16:28:06 +01:00
shara987
071c12cc70 zero: treat images and art as aliases in keep_fields
Fixes #3532: when 'images' is listed in keep_fields, embedded album
art was still being removed because the plugin didn't recognize 'art'
as an alias for 'images'. Now both fields are kept when either appears
in keep_fields.
2026-04-25 16:28:06 +01:00
shara987
a0041356cd zero: treat 'images' and 'art' as aliases in keep_fields
Fixes #3532: when 'images' is listed in keep_fields, embedded album
art was still being removed because the plugin didn't recognize 'art'
as an alias for 'images'. Now both fields are kept when either appears
in keep_fields.
2026-04-25 16:28:06 +01:00
Šarūnas Nejus
556780ea7e Keep unique ft artists 2026-04-25 16:04:58 +01:00
Šarūnas Nejus
9ee86d0e78 Add a test to repro the issue 2026-04-25 15:45:52 +01:00
Alok Saboo
999286a39e Merge branch 'master' into spotify_batch 2026-04-24 09:44:43 -04:00
Šarūnas Nejus
ccdccdfa8d Remove slow_test unittest marker 2026-04-22 21:47:16 +01:00
Alok Saboo
e0aec44aee Merge branch 'master' into spotify_batch 2026-04-20 18:05:40 -04:00
Sebastian Mohr
eaf1f00424 warning instead of raising errors. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
290837222b Added a few tests for the RateLimitAdapter 2026-04-20 20:55:47 +02:00
Sebastian Mohr
2c24b93ca7 Another subset of review comments from @snejus:
- Renamed _extract_* methods to _parse_*
- Renamed release to date_parts
- Using .get instead of .request("GET"...)
2026-04-20 20:55:47 +02:00
Sebastian Mohr
b9949ccae5 A subset of review comments from @snejus:
- Renamed id to _id
- Aligned line breaks for some comment with actual ruff line length
- Removed comment dividers
- Removed a number of unnecessary or duplicate comments
2026-04-20 20:55:47 +02:00
Sebastian Mohr
90e02be5c8 Added tests for candidates and item_candidates. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
1569810427 Added candidate method implementations methods: Required a slight
amount of refactoring but im more happy with the abstraction now.
2026-04-20 20:55:47 +02:00
Sebastian Mohr
a85de2d8fa Implemented batch lookup methods for more efficient retrieval. 2026-04-20 20:55:47 +02:00
Sebastian Mohr
4d6fc9982c Added a number of unit tests for the parsing. 2026-04-20 20:55:47 +02:00
Šarūnas Nejus
2698044eac Support 'track' prefix when parsing track from filename 2026-04-20 16:09:13 +01:00
J0J0 Todos
04904902f5 smartplaylist: Fix existing tests after CLI overhaul 2026-04-19 22:55:35 +02:00
J0J0 Todos
f5adad7e43 smartplaylist: Tests for CLI overhaul 2026-04-19 22:55:29 +02:00
Alok Saboo
8c7868de38 Merge branch 'spotify_batch' of https://github.com/arsaboo/beets into spotify_batch 2026-04-19 09:09:28 -04:00
Alok Saboo
2c7274fff1 Address reviewer comments and update related tests 2026-04-19 09:08:55 -04:00
Alok Saboo
b42d6efbc0 Merge branch 'master' into spotify_batch 2026-04-19 08:46:23 -04:00
Eric Masseran
567a83fc74 No condition in tests 2026-04-19 12:28:07 +02:00
Eric Masseran
363b681421 Add alias on artist credit release and track 2026-04-19 10:54:34 +02:00
Alok Saboo
99b81c550f lint 2026-04-18 21:16:39 -04:00
Alok Saboo
92481b6c35 Merge branch 'spotify_batch' of https://github.com/arsaboo/beets into spotify_batch 2026-04-18 21:08:04 -04:00
Alok Saboo
826aaeb4b3 Address reviewer comments 2026-04-18 21:07:48 -04:00
Alok Saboo
bd6c7378a9 Merge branch 'master' into spotify_batch 2026-04-18 18:32:50 -04:00