feat: real mutagen tagger and MusicBrainz tracklist

This commit is contained in:
Jonathan
2026-07-10 23:52:19 +02:00
parent 1c02a870f3
commit 32deac65a6
5 changed files with 103 additions and 0 deletions
+20
View File
@@ -0,0 +1,20 @@
from lyra_worker._mutagen import plan_track_names
def test_plan_uses_tracklist_titles_and_numbers():
names = ["02-b.flac", "01-a.flac"] # unsorted on purpose
plan = plan_track_names(names, ("Alpha", "Beta"))
assert plan == [
("01-a.flac", "01 Alpha.flac", "Alpha", 1),
("02-b.flac", "02 Beta.flac", "Beta", 2),
]
def test_plan_falls_back_to_filename_stem_and_sanitizes():
plan = plan_track_names(["10 - AC_DC.mp3"], ()) # no tracklist
assert plan[0][1] == "01 10 - AC_DC.mp3" # stem reused, renumbered, safe
def test_plan_ignores_non_audio_files():
plan = plan_track_names(["cover.jpg", "song.opus", "notes.txt"], ())
assert [p[0] for p in plan] == ["song.opus"]
+31
View File
@@ -0,0 +1,31 @@
import os
import shutil
import pytest
pytestmark = pytest.mark.skipif(
not (os.environ.get("LYRA_LIVE_TESTS") and os.environ.get("LYRA_SAMPLE_AUDIO")),
reason="tags a real audio file; set LYRA_LIVE_TESTS=1 + LYRA_SAMPLE_AUDIO=/path/to/a.flac to run",
)
def test_tags_and_renames_a_real_file(tmp_path):
import mutagen
from lyra_worker._mutagen import MutagenTagger
from lyra_worker.types import MBTarget
ext = os.path.splitext(os.environ["LYRA_SAMPLE_AUDIO"])[1]
src = tmp_path / f"track1{ext}"
shutil.copy(os.environ["LYRA_SAMPLE_AUDIO"], src)
target = MBTarget(artist="John Mayer", album="Continuum", year=2006, tracklist=("Stop This Train",))
MutagenTagger().tag_album(str(tmp_path), target)
out = tmp_path / f"01 Stop This Train{ext}"
assert out.exists()
tagged = mutagen.File(str(out), easy=True)
assert tagged["artist"] == ["John Mayer"]
assert tagged["album"] == ["Continuum"]
assert tagged["title"] == ["Stop This Train"]
assert tagged["tracknumber"] == ["1"]