feat(worker): Last.fm artist.getSimilar as a second discovery SimilaritySource
Adds LastfmSource, resolving Last.fm's often-empty artist mbid via the injected MB browser (name->mbid cached) so every emitted SimilarArtist.mbid is a real MusicBrainz artist MBID. Registered in build_similarity_sources, gated on lastfm.api_key so the ListenBrainz-only path is unchanged when unset.
This commit is contained in:
@@ -12,6 +12,7 @@ from lyra_worker.adapters.youtube import YouTubeAdapter
|
||||
from lyra_worker.browser import MbBrowser
|
||||
from lyra_worker.probe import AudioProbe
|
||||
from lyra_worker.resolver import MbResolver
|
||||
from lyra_worker.similarity._lastfm import LastfmSource
|
||||
from lyra_worker.similarity._listenbrainz import ListenBrainzSource
|
||||
from lyra_worker.similarity.base import SimilaritySource
|
||||
from lyra_worker.tagger import Tagger
|
||||
@@ -53,5 +54,12 @@ def build_probe() -> AudioProbe:
|
||||
|
||||
def build_similarity_sources(config: dict) -> list[SimilaritySource]:
|
||||
"""Similarity sources for discovery. ListenBrainz needs no credentials, so it is
|
||||
always constructed; per-run reachability is checked via each source's health()."""
|
||||
return [ListenBrainzSource(base_url=config.get("discover.listenBrainzUrl") or "")]
|
||||
always constructed; per-run reachability is checked via each source's health().
|
||||
Last.fm is added only when an API key is configured."""
|
||||
sources: list[SimilaritySource] = [
|
||||
ListenBrainzSource(base_url=config.get("discover.listenBrainzUrl") or "")
|
||||
]
|
||||
key = config.get("lastfm.api_key")
|
||||
if key:
|
||||
sources.append(LastfmSource(api_key=key, browser=MusicBrainzBrowser()))
|
||||
return sources
|
||||
|
||||
Reference in New Issue
Block a user