Abhishek Biswas
e07f5dea76
🐛 Fix form validation regression with empty string default values
Fixes #13533
This fixes regressions in form handling where empty strings in form
fields were incorrectly treated as values instead of using default
values for optional fields.
## Problem
When form fields with Optional types and None defaults received empty
strings (""), FastAPI incorrectly treated them as empty string values
instead of using the default value (None). This affected both:
- x-www-form-urlencoded forms
- multipart/form-data forms
This regression broke existing applications when upgrading from
v0.112.4 to v0.115.x.
## Solution
Modified the _extract_form_body function in fastapi/dependencies/utils.py:
1. Track defined body_field aliases to distinguish between declared
fields and extra fields
2. Don't add empty strings for Form fields since _get_multidict_value
already handles them correctly by returning default values
3. Only add extra fields from received_body that are not already
defined as body_fields to prevent overwriting correctly processed
default values
## Tests
- Added comprehensive regression tests in
tests/test_forms_empty_string_default_13533.py
- All existing form-related tests pass (verified 20+ tests)
- Python 3.8+ compatible (uses typing_extensions.Annotated)
10 months ago
Abhishek Biswas
e201c735aa
fix ISSUE 13533
10 months ago
Sebastián Ramírez
864b569cf8
🔖 Release version 0.119.1
10 months ago
Sofie Van Landeghem
d8c691f7f0
🐛 Fix internal Pydantic v1 compatibility (warnings) for Python 3.14 and Pydantic 2.12.1 ( #14186 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sebastián Ramírez <[email protected] >
10 months ago
Marcelo Trylesinski
dde7bd1ceb
📝 Replace `starlette.io` by `starlette.dev` and `uvicorn.org` by `uvicorn.dev` ( #14176 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
10 months ago
Sebastián Ramírez
2e721e1b02
🔖 Release version 0.119.0
10 months ago
Sebastián Ramírez
d34918abf0
✨ Add support for `from pydantic.v1 import BaseModel`, mixed Pydantic v1 and v2 models in the same app ( #14168 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
10 months ago
Sebastián Ramírez
352dbefc63
🔖 Release version 0.118.3
10 months ago
Sebastián Ramírez
942fce394b
🔖 Release version 0.118.2
10 months ago
François Voron
185cecd891
🐛 Fix tagged discriminated union not recognized as body field ( #12942 )
Co-authored-by: Motov Yurii <[email protected] >
Co-authored-by: Patrick Arminio <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
10 months ago
Sebastián Ramírez
01be148429
🔖 Release version 0.118.1
10 months ago
Colin Watson
c970d8a735
👽 ️ Ensure compatibility with Pydantic 2.12.0 ( #14036 )
Co-authored-by: Sofie Van Landeghem <[email protected] >
Co-authored-by: Victorien <[email protected] >
Co-authored-by: svlandeg <[email protected] >
Co-authored-by: Motov Yurii <[email protected] >
Co-authored-by: Patrick Arminio <[email protected] >
10 months ago
Sebastián Ramírez
333f1ba737
🔖 Release version 0.118.0
10 months ago
Sebastián Ramírez
e329d78f86
🐛 Fix support for `StreamingResponse`s with dependencies with `yield` or `UploadFile`s, close after the response is done ( #14099 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
10 months ago
alv2017
3eb2ee7510
✏️ Fix typos in OAuth2 password request forms ( #14112 )
Fixed typos in OAuth2PasswordRequestForm and in OAuth2PasswordRequestFormStrict
10 months ago
Sebastián Ramírez
784f06cb9b
🔖 Release version 0.117.1
11 months ago
Thomas LÉVEIL
44fc67632b
🐛 Fix validation error when `File` is declared after `Form` parameter ( #11194 )
Co-authored-by: Sebastián Ramírez <[email protected] >
11 months ago
Sebastián Ramírez
382d083e26
🔖 Release version 0.117.0
11 months ago
vvanglro
f1e6f978ce
⚡ ️ Fix `default_factory` for response model field with Pydantic V1 ( #9704 )
Co-authored-by: Motov Yurii <[email protected] >
11 months ago
Robert Hofer
b51ec36f2e
✨ Allow `None` as return type for bodiless responses ( #9425 )
Co-authored-by: Sebastián Ramírez <[email protected] >
11 months ago
Max McLennan
86e515784d
🐛 Fix inconsistent processing of model docstring formfeed char with Pydantic V1 ( #6039 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
11 months ago
Salim Aboubacar
2dc769b121
🐛 Fix `jsonable_encoder` alters `json_encoders` of Pydantic v1 objects ( #4972 )
Co-authored-by: Sebastián Ramírez <[email protected] >
Co-authored-by: Yurii Motov <[email protected] >
11 months ago
sammasak
8ede27223e
✨ Allow array values for OpenAPI schema `type` field ( #13639 )
Co-authored-by: Lukas Rajala <[email protected] >
Co-authored-by: dlax <[email protected] >
Co-authored-by: Motov Yurii <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
11 months ago
Evgeny Bokshitsky
c2c6049b8f
♻️ Create `dependency-cache` dict in `solve_dependencies` only if `None` (don't re-create if empty) ( #13689 )
11 months ago
rmawatson
9ac56c70f2
🐛 Reenable `allow_arbitrary_types` when only 1 argument is used on the API endpoint ( #13694 )
Co-authored-by: Sofie Van Landeghem <[email protected] >
Co-authored-by: Motov Yurii <[email protected] >
11 months ago
Carlos Mario Toro
bc5013cd56
✨ Add OpenAPI `external_docs` parameter to `FastAPI` ( #13713 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <[email protected] >
11 months ago
secrett2633
c831cdbde2
🐛 Fix `inspect.getcoroutinefunction()` can break testing with `unittest.mock.patch()` ( #14022 )
11 months ago
Sofie Van Landeghem
fe4542279d
🚨 Install pydantic.mypy plugin ( #14081 )
11 months ago
Tamir Duberstein
a95e91e46e
⬆️ Update mypy to 1.14.1 ( #12970 )
Co-authored-by: Motov Yurii <[email protected] >
Co-authored-by: Sofie Van Landeghem <[email protected] >
Co-authored-by: svlandeg <[email protected] >
Co-authored-by: svlandeg <[email protected] >
11 months ago
Sebastián Ramírez
a372edf7e8
🔖 Release version 0.116.2
11 months ago
Ben Beasley
7563579dc8
⬆️ Upgrade Starlette supported version range to >=0.40.0,<0.49.0 ( #14077 )
Co-authored-by: svlandeg <[email protected] >
11 months ago
Sebastián Ramírez
313723494b
🔖 Release version 0.116.1
1 year ago
Sebastián Ramírez
cad6880fd9
⬆️ Upgrade Starlette supported version range to `>=0.40.0,<0.48.0` ( #13884 )
1 year ago
Sebastián Ramírez
bd8f358fd9
🔖 Release version 0.116.0
1 year ago
Sebastián Ramírez
ebdeda2de6
🔖 Release version 0.115.14
1 year ago
Patrick Arminio
9d0d8828cc
🐛 Fix support for unions when using `Form` ( #13827 )
1 year ago
Sebastián Ramírez
4734df1db8
🔖 Release version 0.115.13
1 year ago
Gabriel
dfe9dde982
📝 Add annotations to HTTP middleware example ( #11530 )
Co-authored-by: Sofie Van Landeghem <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
1 year ago
Salar Nosrati-Ershad
aebff5006f
✨ Add `refreshUrl` parameter in `OAuth2PasswordBearer` ( #11460 )
Co-authored-by: Salar Nosrati-Ershad <[email protected] >
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Alejandra <[email protected] >
Co-authored-by: Motov Yurii <[email protected] >
1 year ago
oogee
30b9dfb11c
🚸 Set format to password for fields `password` and `client_secret` in `OAuth2PasswordRequestForm`, make docs show password fields for passwords ( #11032 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 year ago
Peter
b4524145e6
✏️ Fix typo in docstring ( #13532 )
1 year ago
Timon
97fdbdd0d8
📝 Update exclude-parameters-from-openapi documentation links ( #13600 )
1 year ago
Motov Yurii
535d5b3f9f
🐛 Fix truncating the model's description with form feed (`\f`) character for Pydantic V2 ( #13698 )
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 year ago
Joakim Nordling
8fa56b46a1
⬆️ Update ReDoc to version 2.x ( #9700 )
Co-authored-by: svlandeg <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
Co-authored-by: Sofie Van Landeghem <[email protected] >
1 year ago
Sebastián Ramírez
628c34e0ca
🔖 Release version 0.115.12
1 year ago
Sebastián Ramírez
2537d9d1c2
🐛 Fix `convert_underscores=False` for header Pydantic models ( #13515 )
1 year ago
dependabot[bot]
8c94e97c89
⬆ Bump ruff to 0.9.4 ( #13299 )
* ⬆ Bump ruff from 0.6.4 to 0.9.4
Bumps [ruff](https://github.com/astral-sh/ruff ) from 0.6.4 to 0.9.4.
- [Release notes](https://github.com/astral-sh/ruff/releases )
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md )
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.4...0.9.4 )
---
updated-dependencies:
- dependency-name: ruff
dependency-type: direct:production
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <[email protected] >
* update pre-commit accordingly and make formatting changes
* 🎨 [pre-commit.ci] Auto format from pre-commit.com hooks
---------
Signed-off-by: dependabot[bot] <[email protected] >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Alejandra <[email protected] >
Co-authored-by: svlandeg <[email protected] >
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 year ago
Sebastián Ramírez
3824664620
🔖 Release version 0.115.11
1 year ago
Sebastián Ramírez
74fe89bf35
🐛 Add docs examples and tests (support) for `Annotated` custom validations, like `AfterValidator`, revert #13440 ( #13442 )
This reverts commit 15dd2b67d3 .
1 year ago
Sebastián Ramírez
433837d9ca
🔖 Release version 0.115.10
1 year ago