feat(scada): serve project devices through pooled API

This commit is contained in:
2026-09-08 18:18:30 +08:00
parent 5966d039de
commit 8942541759
9 changed files with 269 additions and 151 deletions
@@ -8,6 +8,7 @@ from psycopg import connect
from app.core.config import get_pgconn_string
from app.infra.db.dynamic_manager import ProjectConnectionManager
from app.infra.db.postgresql.scada import ScadaInfoRepository
from app.infra.db.timescaledb.sync_pool import timescale_connection
from app.native.wndb.commands.api import delete_pattern_cascade
from app.native.wndb.core.connection import project_connection, project_transaction
@@ -105,6 +106,29 @@ def test_dynamic_pool_replaces_terminated_idle_connection() -> None:
asyncio.run(exercise_pool())
def test_scada_api_repository_reads_device_ids_through_dynamic_pool() -> None:
async def read_scada_devices() -> list[dict]:
manager = ProjectConnectionManager()
try:
async with manager.pg_connection(
uuid4(), "biz_data", get_pgconn_string(db_name=PROJECT), 1, 4
) as conn:
return await ScadaInfoRepository.get_scadas(conn)
finally:
await manager.close_all()
devices = asyncio.run(read_scada_devices())
assert devices
device_ids = [device["device_id"] for device in devices]
assert len(device_ids) == len(set(device_ids))
assert all(device_ids)
assert all(
device["longitude"] is not None and device["latitude"] is not None
for device in devices
)
def test_nested_wndb_writes_roll_back_as_one_transaction() -> None:
with pytest.raises(RuntimeError, match="force rollback"):
with project_transaction(PROJECT) as conn: