Adds shared test helpers for CLI script loading and scoped core.database stubs, then converts a low-conflict pilot set of CLI tests. Part of #2523.
26 lines
919 B
Python
26 lines
919 B
Python
"""Shared loader for CLI scripts under scripts/."""
|
|
import importlib.machinery
|
|
import importlib.util
|
|
from pathlib import Path
|
|
|
|
|
|
_SCRIPTS_DIR = Path(__file__).resolve().parents[2] / "scripts"
|
|
|
|
|
|
def load_script(script_name):
|
|
"""Load a script from scripts/ by name and return it as a module.
|
|
|
|
The module name is derived from the script name (hyphens become underscores,
|
|
with a _cli suffix) giving each script a stable, unique import identity.
|
|
|
|
Any sys.modules stubs the script needs at import time must be injected via
|
|
monkeypatch before calling this function.
|
|
"""
|
|
module_name = script_name.replace("-", "_") + "_cli"
|
|
path = _SCRIPTS_DIR / script_name
|
|
loader = importlib.machinery.SourceFileLoader(module_name, str(path))
|
|
spec = importlib.util.spec_from_loader(loader.name, loader)
|
|
module = importlib.util.module_from_spec(spec)
|
|
loader.exec_module(module)
|
|
return module
|