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.staticfiles import StaticFiles
from sqlalchemy import select
from sqlalchemy.exc import ProgrammingError
from src.api.auth import router as auth_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.database import SessionLocal
from src.models.tool_type import ToolType
from sqlalchemy import select
logger = logging.getLogger(__name__)
app = FastAPI(title="Headquarter API")
@@ -58,20 +62,24 @@ services:
},
]
for tool_data in builtin_types:
existing = await session.scalar(select(ToolType).where(ToolType.name == tool_data["name"]))
if not existing:
tool_type = ToolType(
name=tool_data["name"],
display_name=tool_data["display_name"],
description=tool_data["description"],
compose_template=tool_data["compose_template"],
required_variables=tool_data["required_variables"],
is_builtin=True,
)
session.add(tool_type)
try:
for tool_data in builtin_types:
existing = await session.scalar(select(ToolType).where(ToolType.name == tool_data["name"]))
if not existing:
tool_type = ToolType(
name=tool_data["name"],
display_name=tool_data["display_name"],
description=tool_data["description"],
compose_template=tool_data["compose_template"],
required_variables=tool_data["required_variables"],
is_builtin=True,
)
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")