type_: Type[Any],
class_validators: Optional[Dict[str, Validator]] = None,
default: Optional[Any] = None,
- required: Union[bool, UndefinedType] = False,
+ required: Union[bool, UndefinedType] = True,
model_config: Type[BaseConfig] = BaseConfig,
field_info: Optional[FieldInfo] = None,
alias: Optional[str] = None,
-from typing import List, Optional
+from typing import List, Optional, Union
import pytest
from fastapi import FastAPI
return {"name": "invalid", "price": "foo"}
+@app.get("/items/invalidnone", response_model=Item)
+def get_invalid_none():
+ return None
+
+
+@app.get("/items/validnone", response_model=Union[Item, None])
+def get_valid_none(send_none: bool = False):
+ if send_none:
+ return None
+ else:
+ return {"name": "invalid", "price": 3.2}
+
+
@app.get("/items/innerinvalid", response_model=Item)
def get_innerinvalid():
return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]}
client.get("/items/invalid")
+def test_invalid_none():
+ with pytest.raises(ValidationError):
+ client.get("/items/invalidnone")
+
+
+def test_valid_none_data():
+ response = client.get("/items/validnone")
+ data = response.json()
+ assert response.status_code == 200
+ assert data == {"name": "invalid", "price": 3.2, "owner_ids": None}
+
+
+def test_valid_none_none():
+ response = client.get("/items/validnone", params={"send_none": "true"})
+ data = response.json()
+ assert response.status_code == 200
+ assert data is None
+
+
def test_double_invalid():
with pytest.raises(ValidationError):
client.get("/items/innerinvalid")