fix: handle missing tool_types table gracefully on startup

Catch ProgrammingError when tool_types table doesn't exist yet
(during fresh database setup). Log warning and skip seeding instead
of crashing.
This commit is contained in:
Fusion
2026-05-18 21:29:48 +02:00
parent a2c787d474
commit 899fba9c9b
+22 -14
View File
@@ -1,5 +1,9 @@
import logging
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from sqlalchemy import select
from sqlalchemy.exc import ProgrammingError
from src.api.auth import router as auth_router from src.api.auth import router as auth_router
from src.api.git_repositories import router as git_repositories_router from src.api.git_repositories import router as git_repositories_router
@@ -10,8 +14,8 @@ from src.api.user_config import router as user_config_router
from src.api.users import router as users_router from src.api.users import router as users_router
from src.database import SessionLocal from src.database import SessionLocal
from src.models.tool_type import ToolType from src.models.tool_type import ToolType
from sqlalchemy import select
logger = logging.getLogger(__name__)
app = FastAPI(title="Headquarter API") app = FastAPI(title="Headquarter API")
@@ -58,20 +62,24 @@ services:
}, },
] ]
for tool_data in builtin_types: try:
existing = await session.scalar(select(ToolType).where(ToolType.name == tool_data["name"])) for tool_data in builtin_types:
if not existing: existing = await session.scalar(select(ToolType).where(ToolType.name == tool_data["name"]))
tool_type = ToolType( if not existing:
name=tool_data["name"], tool_type = ToolType(
display_name=tool_data["display_name"], name=tool_data["name"],
description=tool_data["description"], display_name=tool_data["display_name"],
compose_template=tool_data["compose_template"], description=tool_data["description"],
required_variables=tool_data["required_variables"], compose_template=tool_data["compose_template"],
is_builtin=True, required_variables=tool_data["required_variables"],
) is_builtin=True,
session.add(tool_type) )
session.add(tool_type)
await session.commit() await session.commit()
except ProgrammingError:
logger.warning("tool_types table does not exist yet. Skipping seeding. Run migrations first.")
await session.rollback()
@app.on_event("startup") @app.on_event("startup")