"""Loads the sibling standalone `musicfetch` script (no .py extension) as a module and re-exports the symbols the API reuses. This is the single seam between the REST API and the CLI; musicfetch itself is unchanged.""" import importlib.machinery import importlib.util import os import sys _HERE = os.path.dirname(os.path.abspath(__file__)) _MF_PATH = os.environ.get("MUSICFETCH_BIN", os.path.join(_HERE, "..", "musicfetch")) # spec_from_file_location returns None for extension-less files, so use # SourceFileLoader directly to handle the bare `musicfetch` binary. _loader = importlib.machinery.SourceFileLoader("musicfetch_core", _MF_PATH) _spec = importlib.util.spec_from_loader("musicfetch_core", _loader) _mod = importlib.util.module_from_spec(_spec) _spec.loader.exec_module(_mod) # safe: musicfetch guards main() behind __main__ sys.modules["musicfetch_core"] = _mod Hit = _mod.Hit build_combined_hits = _mod.build_combined_hits pick = _mod.pick act_youtube = _mod.act_youtube act_lidarr_album = _mod.act_lidarr_album act_lidarr_artist = _mod.act_lidarr_artist QUALITY_CHOICES = _mod.QUALITY_CHOICES is_url = _mod.is_url probe_url = _mod.probe_url download_hits = _mod.download_hits download_single = _mod.download_single _is_direct_url = _mod._is_direct_url odesli_resolve = _mod.odesli_resolve resolve_link_hits = _mod.resolve_link_hits handle_link = _mod.handle_link OdesliError = _mod.OdesliError __all__ = ["Hit", "build_combined_hits", "pick", "act_youtube", "act_lidarr_album", "act_lidarr_artist", "QUALITY_CHOICES", "is_url", "probe_url", "download_hits", "download_single", "_is_direct_url", "odesli_resolve", "resolve_link_hits", "handle_link", "OdesliError"]