doc-inspector / tests /scripts_support.py
steven0226's picture
deploy: sync verified GitHub v1.1.0
aa7b4a6 verified
Raw
History Blame Contribute Delete
916 Bytes
"""Load executable scripts for isolated offline unit tests."""
from __future__ import annotations
import importlib.util
from pathlib import Path
import sys
from types import ModuleType
def load_script_module(name: str) -> ModuleType:
path = Path(__file__).parents[1] / "scripts" / f"{name}.py"
module_name = f"doc_inspector_script_{name}"
spec = importlib.util.spec_from_file_location(module_name, path)
if spec is None or spec.loader is None:
raise RuntimeError(f"無法載入 script:{name}")
module = importlib.util.module_from_spec(spec)
# Registering before execution lets dataclasses resolve the postponed
# annotations that `from __future__ import annotations` leaves as strings.
sys.modules[module_name] = module
try:
spec.loader.exec_module(module)
except BaseException:
sys.modules.pop(module_name, None)
raise
return module