"""Test bootstrap. Puts the vendored ha_adb_common package on sys.path so helpers can be imported directly (their code is stdlib-only) without installing Home Assistant or executing the integration's __init__ module. The integration-package modules that stay Home-Assistant-free at import time (currently connection.py) are also made importable — via a synthetic package ("nsh") that wraps custom_components/nvidia_shield WITHOUT executing its __init__.py (that one imports Home Assistant). Only the stdlib-only modules are loaded into it explicitly; their relative imports resolve normally. """ import importlib.util import sys import types from pathlib import Path REPO_ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(REPO_ROOT / "custom_components" / "nvidia_shield")) _SHIELD_DIR = REPO_ROOT / "custom_components" / "nvidia_shield" _PKG = "nsh" def _load_module(name: str, path: Path, search_paths: list[str] | None = None): """Import a source file under ``name`` without touching real packages.""" spec = importlib.util.spec_from_file_location( name, path, submodule_search_locations=search_paths ) module = importlib.util.module_from_spec(spec) sys.modules[name] = module spec.loader.exec_module(module) return module # Synthetic integration package — no __init__.py execution (HA-free). _root = types.ModuleType(_PKG) _root.__path__ = [str(_SHIELD_DIR)] sys.modules[_PKG] = _root # Real subpackage __init__ (stdlib-only) so `from .ha_adb_common import ...` # works through the synthetic package. _load_module( f"{_PKG}.ha_adb_common", _SHIELD_DIR / "ha_adb_common" / "__init__.py", [str(_SHIELD_DIR / "ha_adb_common")], ) # Stdlib-only integration modules. for _mod in ("const", "adb_session", "connection"): _load_module(f"{_PKG}.{_mod}", _SHIELD_DIR / f"{_mod}.py")