Add api/ with a FastAPI app that imports the bundled NestQuest core (Feature 15) WITHOUT importing homeassistant: api/nestquest_core.py bootstraps the integration directory onto sys.path and imports core as a top-level package, so custom_components/nestquest/__init__.py (which imports HA) never executes. This transitional coupling is encapsulated in one documented helper to revisit in Feature 18. The app reads NESTQUEST_DB_PATH (env var, documented temp default), opens+migrates the SQLite database in a FastAPI lifespan, and serves GET /health (200, status ok + resolved db_path) and the OpenAPI doc at /docs and /openapi.json. Tests start the app with httpx against the ASGI app and assert all three; a subprocess test proves the app imports core without importing homeassistant or registering custom_components. Add fastapi, uvicorn, httpx to the dev dependency group; uv lock. Suite green at 1581 (1576 baseline + 5 new API tests).
18 lines
860 B
Python
18 lines
860 B
Python
"""NestQuest API service.
|
|
|
|
A standalone FastAPI deployable that owns the NestQuest database and
|
|
exposes it over HTTP to the Home Assistant integration (panel plane) and
|
|
the admin PWA (admin plane). See Feature 16 (task cd03735b) in the
|
|
project tracker for the full contract.
|
|
|
|
This package imports the NestQuest domain ``core`` WITHOUT executing
|
|
``custom_components/nestquest/__init__.py`` — that parent package's
|
|
``__init__.py`` imports ``homeassistant``, which is absent from the
|
|
API's runtime. The coupling is encapsulated in
|
|
:mod:`api.nestquest_core` (a ``sys.path`` bootstrap that makes ``core``
|
|
importable as a top-level package). It is a TRANSITIONAL coupling that
|
|
Feature 18 will revisit: once the integration becomes a thin API client
|
|
and ``core`` moves out of the integration bundle, this helper goes away.
|
|
"""
|
|
from __future__ import annotations
|