@post(
"/status/{code:int}",
responses={
HTTP_200_OK: ResponseSpec(data_container=StatusResponse, description="Success response"),
HTTP_400_BAD_REQUEST: ResponseSpec(data_container=StatusResponse, description="Bad request error"),
HTTP_404_NOT_FOUND: ResponseSpec(data_container=StatusResponse, description="Resource not found"),
HTTP_500_INTERNAL_SERVER_ERROR: ResponseSpec(
data_container=StatusResponse, description="Internal server error"
),
},
)
async def status_by_code(code: int) -> Response[Any]:
"""Return different HTTP status codes based on the path parameter."""
if code == HTTP_200_OK:
return Response(StatusResponse(message="Success!"), status_code=HTTP_200_OK)
if code == HTTP_400_BAD_REQUEST:
return Response(StatusResponse(error="Bad request"), status_code=HTTP_400_BAD_REQUEST)
if code == HTTP_404_NOT_FOUND:
return Response(StatusResponse(error="Not found"), status_code=HTTP_404_NOT_FOUND)
if code == HTTP_500_INTERNAL_SERVER_ERROR:
return Response(StatusResponse(error="Server error"), status_code=HTTP_500_INTERNAL_SERVER_ERROR)
return Response(StatusResponse(error="Unknown code"), status_code=code)
app = Litestar(
[status_by_code],
openapi_config=OpenAPIConfig(
title="HTTP Status Code POC",
version="1.0.0",
path="/schema",
render_plugins=[ScalarRenderPlugin()],
),
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)