| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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)
|