"""Musopen fetcher — DEFERRED (see spec §6.4). Public-domain / CC classical music. Access has historically been gated and may require an API key (a secret — never logged, see spec §9). The Fetcher seam is wired so enabling it later is purely additive; it raises until implemented. """ from __future__ import annotations from tools.ingest.base import Candidate _DEFERRED = "deferred — see spec §6.4 (Musopen access may require an API key)" class MusopenFetcher: archive = "musopen" 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)