P2-1 (containment): api/nestquest_core.py no longer mutates sys.path. Load core by file location with importlib.util.spec_from_file_location, registering it under the distinct top-level name 'nestquest_core' with submodule_search_locations pointing at the bundled core directory. No generic top-level names (db, const, schema, ...) are published that could shadow a future dependency, and the integration's HA-coupled __init__ is never executed. Use importlib.import_module for submodules; drop the redundant _BOOTSTRAPPED flag. Document that two core copies (nestquest_core.* and custom_components.nestquest.core.*) coexist in the pytest process so later tasks must not compare class/exception identity across them. P2-2 (fail fast): ApiConfig.from_env now RAISES ConfigError when NESTQUEST_DB_PATH is unset or empty — no silent fallback to a predictable world-writable temp path that loses data at reboot. Remove the module-level 'app = create_app()' (it read env at import time and would break fail-fast); document serving with 'uvicorn --factory api.app:create_app'. P3 cleanups: - /health drops db_path from the body (no filesystem path leak on an unauthenticated route) and runs a cheap SELECT 1 to reflect database reachability. - Remove dead code: resolve_db_path in api/config.py; unused LOGGER in api/app.py. - tests/test_api_health.py: add ApiConfig.from_env tests (set value, empty raises, missing raises); add startup-failure tests (unwritable dir, non-SQLite file); assert shutdown closes the connection (connected is False); make _AppRunner.__aexit__ use try/finally so a client error still shuts down the lifespan; reuse api.database._executor instead of a duplicated local copy; in the no-HA subprocess test assert core.__file__ points at the bundled directory and stop passing the unused ':memory:'. - pyproject.toml: comment that fastapi/uvicorn are dev-group only so the monorepo test venv can exercise the app; the API deployable's runtime dependencies must be declared when it is packaged (Feature 17).
31 lines
864 B
TOML
31 lines
864 B
TOML
[project]
|
|
name = "nestquest"
|
|
version = "0.5.0"
|
|
description = "NestQuest Home Assistant Integration"
|
|
readme = "README.md"
|
|
requires-python = ">=3.11"
|
|
dependencies = []
|
|
|
|
[dependency-groups]
|
|
# fastapi and uvicorn live in the DEV group only so the monorepo's test
|
|
# venv can exercise the API app (tests under tests/test_api_health.py).
|
|
# They are NOT runtime dependencies of the NestQuest HA integration.
|
|
# When the API deployable is packaged (Feature 17), its runtime
|
|
# dependencies — fastapi, uvicorn, and any others — MUST be declared in
|
|
# that deployable's own dependency manifest, not here.
|
|
dev = [
|
|
"fastapi>=0.115",
|
|
"httpx>=0.28",
|
|
"jinja2>=3",
|
|
"pytest>=8.0.0",
|
|
"pytest-asyncio>=0.24",
|
|
"pyyaml>=6",
|
|
"uvicorn>=0.30",
|
|
"voluptuous>=0.14",
|
|
]
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
pythonpath = ["."]
|
|
asyncio_mode = "auto"
|