setup: init-db e reset-db rispondono 500 (asyncio.run dentro il loop) #80
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
FILE: src/backend/api/routers/setup.py:48 _stamp_head() -> command.stamp(Config(alembic.ini), 'head') -> src/backend/migrations/env.py:81 asyncio.run(run_async_migrations()).
COSA SI ROMPE: POST /api/setup/init-db (setup.py:308-315) e POST /api/setup/reset-db (setup.py:737-751) sono endpoint async: asyncio.run dentro un loop gia' attivo -> RuntimeError -> 500. Vale per Docker e per il pacchetto Windows (TieMeasureFlow#76).
TROVATO DA: agente piano C (#76), prova a mano sull'exe installato su daitarn il 17/10/2026. avvio.py non usa init-db (esegue upgrade head da se'), quindi il primo avvio del pacchetto non e' bloccato; reset-db dalla pagina di setup si'.
CORREZIONE PROBABILE: _stamp_head eseguito in un thread (await asyncio.to_thread / run_in_threadpool) oppure env.py che riusa il loop se gia' attivo. TEST: chiamata a init-db e reset-db con TestClient su SQLite file, 200 e riga in alembic_version.
🔵 daitarn — preso in carico 2026-10-17T12:08:10Z
ramo:
lavoro/daitarn· capacità: build-windows, gpuANALISI (passo 1, Opus 5.5)
COSA: src/backend/api/routers/setup.py, endpoint async init_db (riga 308) e reset_db (riga 737) chiamano _stamp_head() (riga 39) in modo sincrono; command.stamp esegue src/backend/migrations/env.py, che in run_migrations_online (riga 80) fa asyncio.run() dentro il loop gia' attivo di FastAPI -> RuntimeError -> 500.
PERCHE' NON SI VEDEVA: src/backend/tests/test_setup.py:30 e test_station_seed.py:39 sostituiscono _stamp_head con lambda: None.
MODIFICHE:
await asyncio.to_thread(_stamp_head)al posto di_stamp_head()(nel thread non c'e' un loop, asyncio.run di env.py funziona). Commento inline col perche'. Nessun'altra modifica a setup.py.TEST (nuovo file src/backend/tests/test_setup_stamp.py):
NON TOCCARE: src/backend/migrations/, src/backend/config.py, src/backend/database.py, src/frontend/, packaging/**, test_setup.py, test_station_seed.py.
Soluzione
ESITO: fatto
FILE: src/backend/api/routers/setup.py — init_db e reset_db: await asyncio.to_thread(_stamp_head) (env.py fa asyncio.run, vietato nel loop di FastAPI). src/backend/tests/test_setup_stamp.py — 2 test nuovi con _stamp_head reale su file SQLite: alembic_version alla head dopo init-db e reset-db.
COMMIT:
f8f5f24(lavoro/daitarn-tmf-80), merge0b22643in V3.0.0.PROVA: test_setup_stamp.py prima del fix -> 2 failed (RuntimeError asyncio.run in running loop), dopo -> 2 passed. PROVA: ramo integrato V3.0.0
d652891su daitarn, Python 3.13: pytest -n 8 src/backend/tests src/frontend/flask_app/tests packaging/windows/tests -> 911 passed, 4 skipped, 0 failed. Tag v3.0.0-rc2.