from fastapi import FastAPI, Request from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse from app.api.modbus import router as modbus_router from app.response import response_payload def validation_error_message(exc: RequestValidationError) -> str: messages: list[str] = [] for error in exc.errors(): location = ".".join(str(item) for item in error.get("loc", []) if item != "body") message = error.get("msg", "validation error") messages.append(f"{location}: {message}" if location else message) return "; ".join(messages) or "validation error" def create_app() -> FastAPI: app = FastAPI(title="Data Collector Gateway") app.include_router(modbus_router, prefix="/api/dc-gateway") @app.exception_handler(RequestValidationError) async def request_validation_exception_handler( request: Request, exc: RequestValidationError, ) -> JSONResponse: data: dict[str, list] = {} if request.url.path.endswith("/modbus/read"): data = {"communication": []} elif request.url.path.endswith(("/modbus/read_points", "/modbus/read-points")): data = {"points": []} return JSONResponse( status_code=200, content=response_payload(1, validation_error_message(exc), data), ) return app app = create_app() def main() -> None: import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)