Adarsh Bennur
b72f26ee53
Merge a320bc6c27 into 0127069d47
2026-03-16 10:21:03 +00:00
Ahsan Sheraz
31bbb38074
📝 Fix duplicated words in docstrings ( #15116 )
...
Fix "to to" and "that that" word duplications in security module docstrings,
and "be be" in test data string.
Co-authored-by: ahsan.sheraz <ahsan.sheraz@bonial.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 11:16:48 +01:00
Sebastián Ramírez
2238155844
✨ Add support for Server Sent Events ( #15030 )
2026-03-01 10:21:52 +01:00
Sebastián Ramírez
1377052c6c
📝 Update docs for responses and new stream with `yield` ( #15023 )
2026-02-27 21:51:40 +01:00
Sebastián Ramírez
749cefdeb1
✨ Add support for streaming JSON Lines and binary data with `yield` ( #15022 )
2026-02-27 19:56:47 +01:00
Motov Yurii
0901b4092c
📝 Rename `docs_src/websockets` to `docs_src/websockets_` to avoid import errors ( #14979 )
2026-02-27 13:34:37 +01:00
Motov Yurii
5aacc7b6a0
🔨 Run tests with `pytest-xdist` and `pytest-cov` ( #14992 )
2026-02-27 11:53:47 +01:00
Sebastián Ramírez
2686c7fbbf
♻️ Refactor logic to handle OpenAPI and Swagger UI escaping data ( #14986 )
2026-02-24 09:28:10 +00:00
Sebastián Ramírez
22354a2530
🔒 ️ Add `strict_content_type` checking for JSON requests ( #14978 )
2026-02-23 18:45:20 +01:00
Sebastián Ramírez
48e9835732
🗑️ Deprecate `ORJSONResponse` and `UJSONResponse` ( #14964 )
2026-02-22 17:34:59 +01:00
Sebastián Ramírez
590a5e5355
✨ Serialize JSON response with Pydantic (in Rust), when there's a Pydantic return type or response model ( #14962 )
2026-02-22 17:07:19 +01:00
Sebastián Ramírez
e8b98d2187
🐛 Fix JSON Schema for files, use `contentMediaType` instead of `format: binary` ( #14953 )
2026-02-21 14:01:31 +01:00
Sebastián Ramírez
faee822574
🎨 Upgrade typing syntax for Python 3.10 ( #14932 )
...
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tiangolo <1326112+tiangolo@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-17 09:59:14 +00:00
Sebastián Ramírez
bbb96d4a0a
🔥 Remove Python 3.9 specific files, no longer needed after updating translations ( #14931 )
2026-02-17 08:08:04 +00:00
Sebastián Ramírez
c9e2277d8b
📝 Update source examples and docs from Python 3.9 to 3.10 ( #14900 )
2026-02-12 14:19:43 +01:00
Sebastián Ramírez
ad4e8e0060
➖ Drop support for Python 3.9 ( #14897 )
...
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-11 19:32:12 +01:00
Sebastián Ramírez
6ce5e3e961
✅ Tweak comment in test to reference PR ( #14885 )
2026-02-10 12:14:38 +00:00
Valentyn
38f965985e
✅ Test order for the submitted byte Files ( #14828 )
...
Co-authored-by: Valentyn Druzhynin <v.druzhynin@zakaz.global>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2026-02-10 11:46:48 +00:00
Javier Sánchez Castro
df950111fe
✨ Show a clear error on attempt to include router into itself ( #14258 )
...
Co-authored-by: Javier Sánchez <javier.sanchez.castro@bookline.ai>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-02-10 11:58:40 +01:00
Motov Yurii
ed2512a5ec
🐛 Fix `on_startup` and `on_shutdown` parameters of `APIRouter` ( #14873 )
...
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-02-09 17:31:57 +01:00
Motov Yurii
227cb85a03
✅ Fix parameterized tests with snapshots ( #14875 )
2026-02-09 16:35:43 +01:00
Sebastián Ramírez
9f4ecf562c
✅ Add inline snapshot tests for OpenAPI before changes from Pydantic v2 ( #14864 )
2026-02-08 10:18:38 +00:00
pre-commit-ci-lite[bot]
5afc0c1751
🎨 Auto format
2026-02-06 19:24:37 +00:00
Adarsh Bennur
eec089f9a3
Fix coverage: Use inline ternary for Pydantic v1/v2 compatibility
...
Replaced multi-line if/else blocks with inline ternary expressions to
ensure all code paths are covered in line-based coverage reporting.
The hasattr() check works correctly for both Pydantic versions:
- V2: hasattr returns True, uses model_fields_set
- V1: hasattr returns False, uses __fields_set__
Combined coverage across matrix jobs will now show 100%.
2026-02-07 00:53:35 +05:30
Adarsh Bennur
7a39d5b85f
Fix: Use typing_extensions.Annotated for Python 3.8 compatibility
...
Python 3.8 does not have Annotated in typing module (added in 3.9).
Using typing_extensions ensures tests run on all Python versions.
Added noqa: UP035 to suppress ruff's preference for typing module,
since typing_extensions is required for Python 3.8 support.
2026-02-07 00:38:40 +05:30
Adarsh Bennur
d7cb6f2538
Fix test ImportError: use local Pydantic version detection instead of internal _compat
...
Replace `from fastapi._compat import PYDANTIC_V2` with local version
detection to avoid ImportError in redistribute/slim package tests where
fastapi._compat internals are not available.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 23:50:47 +05:30
Adarsh Bennur
34c0142517
Fix test syntax + ruff issues causing CI matrix failures
...
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 23:34:20 +05:30
Adarsh Bennur
3f2e378ff3
Fix: Use typing_extensions.Annotated for Python 3.8 compatibility
...
Changed import in tests/test_forms_fields_set.py from typing.Annotated
to typing_extensions.Annotated to ensure tests run on Python 3.8.
This fixes the Test / check CI failure and restores coverage to 100%
by allowing the comprehensive coverage tests to execute on all Python
versions in the CI matrix.
2026-02-06 23:31:43 +05:30
Adarsh Bennur
ca8b59f52d
Fix coverage by adding Query/Header tests to test_forms_fields_set.py
...
Ensures that _get_multidict_value is fully covered (both FormData and non-FormData paths) to satisfy CI requirements.
2026-02-06 23:31:43 +05:30
Adarsh Bennur
39b4ae0698
Fix: Make fields_set tests compatible with Pydantic v1 and v2
...
Rewrote test_forms_fields_set.py to work on both Pydantic versions:
- Use PYDANTIC_V2 flag from fastapi._compat
- Use model_fields_set (v2) or __fields_set__ (v1) appropriately
- Removed field_validator which is v2-only
- All tests now run on both versions for full coverage
2026-02-06 23:31:43 +05:30
Adarsh Bennur
3c62970852
Fix: Make test compatible with Pydantic v1 and v2
...
Add version check to skip test_forms_fields_set.py when Pydantic v1
is installed, since field_validator is a v2-only API.
2026-02-06 23:31:43 +05:30
Adarsh Bennur
b82e39d665
Fix: Preserve model_fields_set for Form models (issue #13399 )
...
When using Form() with Pydantic models, FastAPI was preloading default
values and passing them to Pydantic, causing all fields to appear in
model_fields_set even when not provided. This also caused validation
to be enforced on unprovided defaults.
Changes:
- Modified _get_multidict_value() to check if values is FormData
- For FormData, return None for unprovided fields instead of defaults
- This lets Pydantic handle defaults properly and preserve fields_set
- Updated test expectation in test_forms_single_model.py
- Added comprehensive test suite in test_forms_fields_set.py
The fix ensures Form models behave consistently with JSON body models
regarding field tracking and validation.
Closes #13399
2026-02-06 23:31:43 +05:30
Sebastián Ramírez
f9f7992604
♻️ Re-implement `on_event` in FastAPI for compatibility with the next Starlette, while keeping backwards compatibility ( #14851 )
2026-02-06 16:18:30 +01:00
Kanetsuna Masaya
c5fd75a321
🐛 Fix using `Json[list[str]]` type (issue #10997 ) ( #14616 )
...
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2026-02-05 18:41:43 +00:00
Albin Skott
97145588f5
✨ Add support for PEP695 `TypeAliasType` ( #13920 )
...
Co-authored-by: lokidev <torsten.zielke@protonmail.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2026-02-05 18:34:34 +00:00
Jonathan Fulton
b49435becd
✨ Allow `Response` type hint as dependency annotation ( #14794 )
...
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
2026-02-05 18:23:16 +00:00
Jonathan Fulton
75c47187f3
🐛 Update `ValidationError` schema to include `input` and `ctx` ( #14791 )
...
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
2026-02-04 15:34:02 +01:00
Mickaël Guérin
09f5941f0e
🐛 Fix TYPE_CHECKING annotations for Python 3.14 (PEP 649) ( #14789 )
2026-02-04 14:49:44 +01:00
Cecilia Madrid
1d96b3e3f1
🐛 Strip whitespaces from `Authorization` header credentials ( #14786 )
2026-02-04 14:46:46 +01:00
johnson-earls
3ee652dd0c
📝 Fix example of license identifier in documentation ( #14492 )
...
Co-authored-by: svlandeg <svlandeg@github.com>
2026-02-04 14:29:02 +01:00
Anton
41352de24c
🚸 Improve error message for invalid query parameter type annotations ( #14479 )
...
Co-authored-by: Anton.D <anton.dehtiarenko@chdp-tech.net>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-02-04 14:24:59 +01:00
DJ Melisso
08dad5c69f
🐛 Fix OpenAPI duplication of `anyOf` refs for app-level responses with specified `content` and `model` as `Union` ( #14463 )
...
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
2026-02-04 14:23:08 +01:00
Sebastián Ramírez
1b42639296
🔥 Remove test variants for Pydantic v1 in test_request_params ( #14612 )
2025-12-27 19:31:34 +01:00
Sebastián Ramírez
44c849c4fc
🔥 Remove Pydantic v1 specific test variants ( #14611 )
2025-12-27 19:19:10 +01:00
Sebastián Ramírez
e300630551
➖ Drop support for `pydantic.v1` ( #14609 )
2025-12-27 13:54:56 +01:00
Sebastián Ramírez
34e884156f
✅ Run performance tests only on Pydantic v2 ( #14608 )
2025-12-26 20:40:26 +00:00
Sebastián Ramírez
535b5daa31
🔊 Add a custom `FastAPIDeprecationWarning` ( #14605 )
2025-12-26 12:45:20 +00:00
Motov Yurii
3063ada72f
✅ Add missing tests for code examples ( #14569 )
...
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Nils-Hero Lindemann <nilsherolindemann@proton.me>
2025-12-26 11:43:02 +01:00
Sebastián Ramírez
6e42bcd8ce
🔊 Add deprecation warnings when using `pydantic.v1` ( #14583 )
2025-12-21 17:44:10 +01:00
Sebastián Ramírez
e2cd8a4201
➖ Drop support for Pydantic v1, keeping short temporary support for Pydantic v2's `pydantic.v1` ( #14575 )
...
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-12-20 16:55:38 +01:00