Commit graph

12222 commits

Author SHA1 Message Date
valrus
723e928d79 Add changelog item 2024-12-29 08:08:25 -08:00
valrus
1af9df2b40 add another benefit of item_types 2024-12-29 08:04:50 -08:00
valrus
5882e2cf67 Fix sorting on missing int fields 2024-12-29 08:01:41 -08:00
Šarūnas Nejus
fdd365f88d
Future proof BucketPluginTest.test_year_single_year_last_folder (#5566)
2025 won't be in the future, forever.

Fixes: https://bugs.debian.org/1091495
2024-12-29 13:34:38 +00:00
Šarūnas Nejus
eb557f720d
Resolve all URLs for markdown 2024-12-28 07:26:04 +00:00
Šarūnas Nejus
555cf322db
Remove the temporary testing workflow 2024-12-28 07:26:04 +00:00
Šarūnas Nejus
0f45791f3a
Fix Unreleased changelog template 2024-12-28 07:26:03 +00:00
Šarūnas Nejus
e579df0a98
Can we link users to plugin docs? 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
779ba791f9
Cap maximum sub-section name length 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
0b905e1b17
Ignore literal code blocks when making headers 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
6d602effc3
Add a test for literal code block 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
806c1702fb
Fix wrapped line starting with the username role 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
89afb8cd89
Test wrapped line starting with the username role 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
c26473e6cb
Fix nested bullet points conversion 2024-12-28 07:24:23 +00:00
Šarūnas Nejus
dd96928f38
Test nested bullet points conversion 2024-12-28 07:24:22 +00:00
Šarūnas Nejus
d98226aa07
Fix ordering bullet point lists 2024-12-28 07:24:22 +00:00
Šarūnas Nejus
7b9625bc86
Test rst to md conversion 2024-12-28 07:24:22 +00:00
Šarūnas Nejus
13e83cdce3
🤦 2024-12-28 07:24:22 +00:00
Šarūnas Nejus
914dbcb420
Cache deps 2024-12-28 07:24:22 +00:00
Šarūnas Nejus
e9076ffb53
Unindent list items in the changelog
I found out that GitHub Actions use pandoc version 2.9.2.1 which
converts bullet points like this:

echo '
* Item
* Another item
' | pandoc --from=rst --to=gfm
  - Item
  - Another item

Note that each item has two-space indent. Meanwhile, locally I've been
testing this conversion using pandoc 3.5 which does not add any indent:

echo '
* Item
* Another item
' | pandoc --from=rst --to=gfm
- Item
- Another item

This commit removes the indent and cleans up the how the replacements in
rst and md text are performed.
2024-12-28 07:24:22 +00:00
Šarūnas Nejus
aff43d8d62
Remove poe output 2024-12-28 07:24:22 +00:00
Šarūnas Nejus
ef4e98389c
Add test for changelog formatting 2024-12-28 07:24:17 +00:00
Stefano Rivera
bcc79a5b09 Future proof BucketPluginTest.test_year_single_year_last_folder
2025 won't be in the future, forever.

Fixes: https://bugs.debian.org/1091495
2024-12-27 16:28:38 -04:00
Šarūnas Nejus
faf7529aa9
Replace munkres with lapjv for track assignment (#5564)
Fixes #5207.

This PR replaces the `munkres` library with `lap` (Linear Assignment
Problem solver) for computing optimal track assignments during the
auto-tagging process. The main changes are:

- Remove `munkres` dependency and add `lap` and `numpy` dependencies
- Refactor the track assignment code to use `lap.lapjv()` instead of
`Munkres().compute()`
- Simplify cost matrix construction using list comprehension
- Move config value reading outside of `track_distance` function to
improve performance

The motivation for this change comes from benchmark comparisons showing
that LAPJV (implemented in the `lap` library) significantly outperforms
the Munkres/Hungarian algorithm for the linear assignment problem. See
detailed benchmarks at: https://github.com/berhane/LAP-solvers

The change should provide better performance for track matching,
especially with larger albums, while maintaining the same assignment
results.

## Testing Notes
- All existing tests pass without modification
- Track assignments produce identical results 
- No behavioral changes in auto-tagging
2024-12-27 17:27:28 +00:00
Šarūnas Nejus
4c8d75ff38
Cache track_length_grace and track_length_max access 2024-12-27 16:22:24 +00:00
Šarūnas Nejus
420117b598
Track assignment: replace munkres with lapjv
See the following comparison between several implementations to solve
this problem: https://github.com/berhane/LAP-solvers
2024-12-27 10:16:28 +00:00
Šarūnas Nejus
2277e2a0d9
Use shutil.move() to move files. (#5123)
Fixes #4622.

I don't think this changes other behavior of the function, but it fixes
the problem with the moved files being created with the wrong
permissions for me.
2024-12-26 18:45:21 +00:00
Aidan Epstein
34af24bbf7 Add some error ignoring for copystat call in move() 2024-12-19 16:43:41 -08:00
Šarūnas Nejus
bcf516b81d
Properly type db on the model, sort out generic types issues (#5545)
Thanks to @wisp3rwind's suggestion this PR adds types to the
relationship between `Model`, `Database` and `Library`.

Then I worked through the rest of the issues found in the edited files.
Most of this involved providing type parameters for generic types (or
defining defaults, rather 😉).

There `queryparse` module had a somewhat significant issue where the
sorting construction logic only expected to receive `FieldSort`
subclasses, while `SmartArtistSort` was not one. Thus `SmartArtistSort`
has now been forced to behave and is a `FieldSort` subclass. It's also
been moved to `query.py` module which is where the rest of sorts are
defined.
2024-12-19 16:46:38 +00:00
Arsen Arsenović
994f9b83f1 pyproject.toml: don't install docs et al into the wheel
wheels are directly unpacked into site-packages, so this means likely
conflict with other packages
2024-12-19 05:12:04 +00:00
Šarūnas Nejus
9110a1110b
Stop perpetually writing mb_artistid, mb_albumartistid and albumtypes fields (#5540)
This PR fixes an issue where the `beet write` command repeatedly shows
differences for certain fields (`mb_artistid`, `mb_albumartistid`,
`albumtype`) even after writing the tags.
This happens because these fields are actually stored as lists in the
media files (`mb_artistids`, `mb_albumartistids`, `albumtypes`), but
beets maintains both single and list versions in its database.

This PR addresses this issue in a non-invasive way: the fix ensures
consistency between single fields and their list counterparts by:
1. When setting a single field value, making it the first element of the
corresponding list
2. When setting a list, using its first element as the single field
value

This resolves long-standing issues #5265, #5371, and #4715 where users
experienced persistent "differences" in these fields despite writing
tags multiple times.

Changes:
- Added `ensure_consistent_list_fields()` function to synchronize field
pairs
- Applied this function during metadata application
- Added tests for all field combinations

Fixes #5265, #5371, #4715

**Note**: your music needs to be reimported with `beet import -LI` or
synchronised with `beet mbsync` in order to fix these fields!
2024-12-15 14:17:22 +00:00
Šarūnas Nejus
3b0c47799b
Define unique_list and dedupe 2024-12-15 13:22:07 +00:00
Šarūnas Nejus
a091c2eeae
Ensure that list fields are corrected for album metadata too 2024-12-15 00:12:36 +00:00
Šarūnas Nejus
550a9a82b1
Fix mb_artistid, mb_albumartistid, albumtype diff issue 2024-12-14 21:39:47 +00:00
Šarūnas Nejus
22163d70a7
Remove support for Python 3.8 (#5508)
- Drop support for EOL Python 3.8 making Python 3.9 the minimum
supported version

- Take advantage of Python 3.9+ type hint syntax by:
  - Using `list[T]` instead of `List[T]` etc. from typing module
  - Using `Type | None` syntax for unions instead of `Union[Type, None]`
  - Moving collection type hints from `typing` to `collections.abc`
  - Using `TYPE_CHECKING` guard for runtime import optimization

Note: in #5503 we found that we cannot support Python 3.12 unless we
upgrade our minimum support Python to 3.9.
2024-12-10 06:54:23 +00:00
Šarūnas Nejus
5c81f94cf7
Move imports required for typing under the TYPE_CHECKING block 2024-12-10 06:10:04 +00:00
Šarūnas Nejus
161b0522bb
Update deprecated imports 2024-12-10 06:10:04 +00:00
Šarūnas Nejus
7ef1b61070
Replace Union types by PEP604 pipe character 2024-12-10 06:10:04 +00:00
Šarūnas Nejus
fbfdfd5444
Remove unnecessary quotes from types 2024-12-10 06:10:04 +00:00
Šarūnas Nejus
51f9dd229e
Use PEP585 lowercase collections typing annotations 2024-12-10 06:10:03 +00:00
Šarūnas Nejus
7be8f9c97a
Update CI config, minimum ruff version, docs and add changelog note 2024-12-10 06:10:03 +00:00
Šarūnas Nejus
88deb07890
Drop Python 3.8 from the package, update dependencies 2024-12-10 06:08:14 +00:00
Šarūnas Nejus
3cc129b893
Package: fix release workflow, exclude plugin tests, include all files from MANIFEST.in (#5536)
Fixes #5526
Fixes #5531
Fixes #5539

### Package contents

See #5526 where a package maintainer fails running plugin tests. I found that before
introduction of Poetry `beets` never bundled plugin tests, therefore I now excluded them.

I also remembered that previously `MANIFEST.in` file was used to specify which files get
included in the package, so I mirrored the same configuration. This includes zsh
completion in `extra/_beet` which fixes #5531.

I removed `MANIFEST.in` file since it has no use anymore.

### Release workflow

The last release workflow run failed to pick up the commit with the version updates and
tagged an outdated commit (#5539). I simplified the workflow to create the tag at the same
time the version upgrade is committed.
2024-12-10 05:58:48 +00:00
Šarūnas Nejus
71eb1bca68
Release: create tag right after commit version update 2024-12-10 05:51:13 +00:00
Šarūnas Nejus
ed3a53f2fe
Exclude plugin tests, include all files from MANIFEST.in 2024-12-10 05:51:09 +00:00
Šarūnas Nejus
af41eef776
lyrics: Fallback to plain lyrics if synced lyrics not available (#5089)
The `synced` config flag was not working the way the docs described it
for the LRCLIB source. With `synced: yes`, if a track does not have
synced lyrics, but does have plain lyrics, the plugin would return no
lyrics. The docs imply that, with the flag enabled, it would still use
plain lyrics if there are no synced lyrics.

LRCLIB API call that returns plain lyrics can be found
[here](https://lrclib.net/api/get?artist_name=Hania%20Rani&track_name=Moans&album_name=Ghosts&duration=274).
2024-12-07 17:54:40 +00:00
Edgars Supe
09360259cc lyrics: Fallback to plain lyrics if synced not available 2024-12-07 19:08:37 +02:00
Šarūnas Nejus
755e825928
ARM install instructions (#5460)
Add info for ARM installs.
2024-12-05 11:43:02 +00:00
RollingStar
40987902df
Update main.rst 2024-12-04 19:56:57 -05:00
RollingStar
eafae03560
Merge branch 'beetbox:master' into arm-info 2024-12-04 19:56:26 -05:00