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:
+22
-14
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user