Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions fastapi/dependencies/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -629,9 +629,9 @@ async def request_body_to_args(
for field in required_params:
value: Any = None
if received_body is not None:
if field.shape in sequence_shapes and isinstance(
received_body, FormData
):
if (
field.shape in sequence_shapes or field.type_ in sequence_types
) and isinstance(received_body, FormData):
value = received_body.getlist(field.alias)
else:
value = received_body.get(field.alias)
Expand Down
46 changes: 46 additions & 0 deletions tests/test_forms_from_non_typing_sequences.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
from fastapi import FastAPI, Form
from starlette.testclient import TestClient

app = FastAPI()


@app.post("/form/python-list")
def post_form_param_list(items: list = Form(...)):
return items


@app.post("/form/python-set")
def post_form_param_set(items: set = Form(...)):
return items


@app.post("/form/python-tuple")
def post_form_param_tuple(items: tuple = Form(...)):
return items


client = TestClient(app)


def test_python_list_param_as_form():
response = client.post(
"/form/python-list", data={"items": ["first", "second", "third"]}
)
assert response.status_code == 200
assert response.json() == ["first", "second", "third"]


def test_python_set_param_as_form():
response = client.post(
"/form/python-set", data={"items": ["first", "second", "third"]}
)
assert response.status_code == 200
assert set(response.json()) == {"first", "second", "third"}


def test_python_tuple_param_as_form():
response = client.post(
"/form/python-tuple", data={"items": ["first", "second", "third"]}
)
assert response.status_code == 200
assert response.json() == ["first", "second", "third"]