53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
"""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")
|