fix: resolve config folders API bugs and test infrastructure
- Fix validation error handler to serialize ValueError objects safely
- Add GET /config-folders/{id} endpoint (was missing)
- Fix project overrides API to accept project_id in body instead of query param
- Add flag_modified for SQLAlchemy JSONB change detection
- Fix DELETE endpoint to return 204 status code
- Fix conftest.py to use single SQLite engine per test
- Install aiosqlite dependency
- Fix frontend ToolWorkshopPage tests button names
Config folders tests: 13/13 passing
Docker build tests: 10/10 passing
Readiness probe tests: 13/13 passing
This commit is contained in:
+29
-1
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
|
||||
@@ -59,6 +60,32 @@ app.add_middleware(RequestLoggingMiddleware)
|
||||
app.add_middleware(ExceptionLoggingMiddleware)
|
||||
|
||||
|
||||
def _sanitize_validation_errors(errors):
|
||||
"""Convert validation errors to JSON-safe format."""
|
||||
sanitized = []
|
||||
for error in errors:
|
||||
safe_error = {
|
||||
"type": error.get("type"),
|
||||
"loc": error.get("loc"),
|
||||
"msg": error.get("msg"),
|
||||
"input": str(error.get("input")) if error.get("input") is not None else None,
|
||||
}
|
||||
# Convert ctx to safe format
|
||||
ctx = error.get("ctx")
|
||||
if ctx:
|
||||
safe_ctx = {}
|
||||
for key, value in ctx.items():
|
||||
if isinstance(value, Exception):
|
||||
safe_ctx[key] = str(value)
|
||||
elif isinstance(value, (str, int, float, bool, type(None))):
|
||||
safe_ctx[key] = value
|
||||
else:
|
||||
safe_ctx[key] = str(value)
|
||||
safe_error["ctx"] = safe_ctx
|
||||
sanitized.append(safe_error)
|
||||
return sanitized
|
||||
|
||||
|
||||
@app.exception_handler(RequestValidationError)
|
||||
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
||||
"""Log validation errors and return detailed response."""
|
||||
@@ -69,9 +96,10 @@ async def validation_exception_handler(request: Request, exc: RequestValidationE
|
||||
request.url.path,
|
||||
errors,
|
||||
)
|
||||
safe_errors = _sanitize_validation_errors(errors)
|
||||
return JSONResponse(
|
||||
status_code=422,
|
||||
content={"detail": errors},
|
||||
content={"detail": safe_errors},
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user