feat: real mutagen tagger and MusicBrainz tracklist
This commit is contained in:
@@ -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"]
|
||||
@@ -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"]
|
||||
Reference in New Issue
Block a user