"""Free Music Archive fetcher — DEFERRED (see spec §6.4). CC-licensed music (cc_by / cc_by_nc / cc0). Highest API-stability risk: the public FMA API has been deprecated/changed, so a real implementation resolves from a track URL + page metadata. The Fetcher seam is wired; it raises until implemented. """ from __future__ import annotations from tools.ingest.base import Candidate _DEFERRED = "deferred — see spec §6.4 (FMA public API deprecated/changed)" class FmaFetcher: archive = "fma" def __init__(self, client): self.client = client def search(self, query: str, *, limit: int) -> list[Candidate]: raise NotImplementedError(_DEFERRED) def resolve(self, identifier: str) -> Candidate: raise NotImplementedError(_DEFERRED)