def is_body_allowed_for_status_code(status_code: Union[int, str, None]) -> bool:
if status_code is None:
return True
+ # Ref: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#patterned-fields-1
+ if status_code in {
+ "default",
+ "1XX",
+ "2XX",
+ "3XX",
+ "4XX",
+ "5XX",
+ }:
+ return True
current_status_code = int(status_code)
return not (current_status_code < 200 or current_status_code in {204, 304})
from fastapi import APIRouter, FastAPI
from fastapi.testclient import TestClient
+from pydantic import BaseModel
+
+
+class ResponseModel(BaseModel):
+ message: str
+
app = FastAPI()
router = APIRouter()
return "c"
+@router.get(
+ "/d",
+ responses={
+ "400": {"description": "Error with str"},
+ "5XX": {"model": ResponseModel},
+ "default": {"model": ResponseModel},
+ },
+)
+async def d():
+ return "d"
+
+
app.include_router(router)
openapi_schema = {
"operationId": "c_c_get",
}
},
+ "/d": {
+ "get": {
+ "responses": {
+ "400": {"description": "Error with str"},
+ "5XX": {
+ "description": "Server Error",
+ "content": {
+ "application/json": {
+ "schema": {"$ref": "#/components/schemas/ResponseModel"}
+ }
+ },
+ },
+ "200": {
+ "description": "Successful Response",
+ "content": {"application/json": {"schema": {}}},
+ },
+ "default": {
+ "description": "Default Response",
+ "content": {
+ "application/json": {
+ "schema": {"$ref": "#/components/schemas/ResponseModel"}
+ }
+ },
+ },
+ },
+ "summary": "D",
+ "operationId": "d_d_get",
+ }
+ },
+ },
+ "components": {
+ "schemas": {
+ "ResponseModel": {
+ "title": "ResponseModel",
+ "required": ["message"],
+ "type": "object",
+ "properties": {"message": {"title": "Message", "type": "string"}},
+ }
+ }
},
}
response = client.get("/c")
assert response.status_code == 200, response.text
assert response.json() == "c"
+
+
+def test_d():
+ response = client.get("/d")
+ assert response.status_code == 200, response.text
+ assert response.json() == "d"