|
|
|
@ -1,4 +1,5 @@ |
|
|
|
from fastapi import FastAPI |
|
|
|
from fastapi.responses import JSONResponse |
|
|
|
from fastapi.testclient import TestClient |
|
|
|
from pydantic import BaseModel |
|
|
|
|
|
|
|
@ -110,6 +111,73 @@ def mixed_dict(): |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@app.get( |
|
|
|
"/list_include", |
|
|
|
response_model=list[Model1], |
|
|
|
response_model_include={"foo"}, |
|
|
|
) |
|
|
|
def list_include(): |
|
|
|
return [ |
|
|
|
Model1(foo="list_include model foo", bar="list_include model bar"), |
|
|
|
Model1(foo="list_include model2 foo", bar="list_include model2 bar"), |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
@app.get( |
|
|
|
"/list_exclude", |
|
|
|
response_model=list[Model1], |
|
|
|
response_model_exclude={"bar"}, |
|
|
|
) |
|
|
|
def list_exclude(): |
|
|
|
return [ |
|
|
|
Model1(foo="list_exclude model foo", bar="list_exclude model bar"), |
|
|
|
Model1(foo="list_exclude model2 foo", bar="list_exclude model2 bar"), |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
@app.get( |
|
|
|
"/list_exclude_nested", |
|
|
|
response_model=list[Model2], |
|
|
|
response_model_exclude={"ref": {"bar"}}, |
|
|
|
) |
|
|
|
def list_exclude_nested(): |
|
|
|
return [ |
|
|
|
Model2( |
|
|
|
ref=Model1( |
|
|
|
foo="list_exclude_nested model foo", |
|
|
|
bar="list_exclude_nested model bar", |
|
|
|
), |
|
|
|
baz="list_exclude_nested model2 baz", |
|
|
|
) |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
@app.get( |
|
|
|
"/list_exclude_all", |
|
|
|
response_model=list[Model1], |
|
|
|
response_model_exclude={"__all__": {"bar"}}, |
|
|
|
) |
|
|
|
def list_exclude_all(): |
|
|
|
return [ |
|
|
|
Model1(foo="list_exclude_all model foo", bar="list_exclude_all model bar"), |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
@app.get( |
|
|
|
"/list_exclude_response_class", |
|
|
|
response_model=list[Model1], |
|
|
|
response_model_exclude={"bar"}, |
|
|
|
response_class=JSONResponse, |
|
|
|
) |
|
|
|
def list_exclude_response_class(): |
|
|
|
return [ |
|
|
|
Model1( |
|
|
|
foo="list_exclude_response_class model foo", |
|
|
|
bar="list_exclude_response_class model bar", |
|
|
|
), |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
client = TestClient(app) |
|
|
|
|
|
|
|
|
|
|
|
@ -173,3 +241,44 @@ def test_nested_include_mixed_dict(): |
|
|
|
"ref": {"foo": "mixed_dict model foo", "bar": "mixed_dict model bar"}, |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
def test_list_include(): |
|
|
|
response = client.get("/list_include") |
|
|
|
assert response.status_code == 200, response.text |
|
|
|
assert response.json() == [ |
|
|
|
{"foo": "list_include model foo"}, |
|
|
|
{"foo": "list_include model2 foo"}, |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
def test_list_exclude(): |
|
|
|
response = client.get("/list_exclude") |
|
|
|
assert response.status_code == 200, response.text |
|
|
|
assert response.json() == [ |
|
|
|
{"foo": "list_exclude model foo"}, |
|
|
|
{"foo": "list_exclude model2 foo"}, |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
def test_list_exclude_nested(): |
|
|
|
response = client.get("/list_exclude_nested") |
|
|
|
assert response.status_code == 200, response.text |
|
|
|
assert response.json() == [ |
|
|
|
{ |
|
|
|
"ref": {"foo": "list_exclude_nested model foo"}, |
|
|
|
"baz": "list_exclude_nested model2 baz", |
|
|
|
} |
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
def test_list_exclude_all(): |
|
|
|
response = client.get("/list_exclude_all") |
|
|
|
assert response.status_code == 200, response.text |
|
|
|
assert response.json() == [{"foo": "list_exclude_all model foo"}] |
|
|
|
|
|
|
|
|
|
|
|
def test_list_exclude_response_class(): |
|
|
|
response = client.get("/list_exclude_response_class") |
|
|
|
assert response.status_code == 200, response.text |
|
|
|
assert response.json() == [{"foo": "list_exclude_response_class model foo"}] |
|
|
|
|