Sebastián Ramírez
b4d58fddee
👷 Automate release preparation ( #15661 )
1 month ago
Yurii Motov
59d4a80fcf
✅ Add `httpx2` test dependency to avoid deprecation warning ( #15603 )
1 month ago
Sebastián Ramírez
063b5bf582
♻️ Do not accept underscore headers when using `convert_underscores=True` (the default) ( #15589 )
1 month ago
Sebastián Ramírez
c7fb7851b3
♻️ Validate Server Sent Event fields to avoid applications from sending broken data ( #15588 )
1 month ago
Sebastián Ramírez
00f805cec9
✅ Update tests, don't double dispose the engine ( #15587 )
1 month ago
Roman Postnov
8b647e3405
⚡ ️ Speed up test suite via caching and fixture scopes to make it ~24% faster ( #13583 )
Co-authored-by: Sebastián Ramírez <[email protected] >
1 month ago
Sebastián Ramírez
fb7429378d
👷 Add pre-commit to check typos ( #15482 )
2 months ago
Sofie Van Landeghem
7815a32f2e
⬆️ Update Pydantic v2 code to address deprecations ( #15101 )
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
2 months ago
Sofie Van Landeghem
4b264878d7
⬆️ Support free-threaded Python 3.14t ( #15149 )
3 months ago
Sebastián Ramírez
ae4e45c5cc
🔥 Remove April Fool's `@app.vibe()` 🤪 ( #15363 )
3 months ago
Sebastián Ramírez
70580da818
✨ Add support for `@app.vibe()` ( #15280 )
3 months ago
Sofie Van Landeghem
aeb9f4bb85
⬆️ Increase lower bound to `pydantic >=2.9.0.` and fix the test suite ( #15139 )
Co-authored-by: Motov Yurii <[email protected] >
3 months ago
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 <[email protected] >
Co-authored-by: Claude Opus 4.6 <[email protected] >
4 months ago
Sebastián Ramírez
2238155844
✨ Add support for Server Sent Events ( #15030 )
4 months ago
Sebastián Ramírez
1377052c6c
📝 Update docs for responses and new stream with `yield` ( #15023 )
4 months ago
Sebastián Ramírez
749cefdeb1
✨ Add support for streaming JSON Lines and binary data with `yield` ( #15022 )
4 months ago
Motov Yurii
0901b4092c
📝 Rename `docs_src/websockets` to `docs_src/websockets_` to avoid import errors ( #14979 )
4 months ago
Motov Yurii
5aacc7b6a0
🔨 Run tests with `pytest-xdist` and `pytest-cov` ( #14992 )
4 months ago
Sebastián Ramírez
2686c7fbbf
♻️ Refactor logic to handle OpenAPI and Swagger UI escaping data ( #14986 )
4 months ago
Sebastián Ramírez
22354a2530
🔒 ️ Add `strict_content_type` checking for JSON requests ( #14978 )
4 months ago
Sebastián Ramírez
48e9835732
🗑️ Deprecate `ORJSONResponse` and `UJSONResponse` ( #14964 )
4 months ago
Sebastián Ramírez
590a5e5355
✨ Serialize JSON response with Pydantic (in Rust), when there's a Pydantic return type or response model ( #14962 )
4 months ago
Sebastián Ramírez
e8b98d2187
🐛 Fix JSON Schema for files, use `contentMediaType` instead of `format: binary` ( #14953 )
4 months ago
Sebastián Ramírez
faee822574
🎨 Upgrade typing syntax for Python 3.10 ( #14932 )
Co-authored-by: Copilot <[email protected] >
Co-authored-by: tiangolo <[email protected] >
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
5 months ago
Sebastián Ramírez
bbb96d4a0a
🔥 Remove Python 3.9 specific files, no longer needed after updating translations ( #14931 )
5 months ago
Sebastián Ramírez
c9e2277d8b
📝 Update source examples and docs from Python 3.9 to 3.10 ( #14900 )
5 months ago
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>
5 months ago
Sebastián Ramírez
6ce5e3e961
✅ Tweak comment in test to reference PR ( #14885 )
5 months ago
Valentyn
38f965985e
✅ Test order for the submitted byte Files ( #14828 )
Co-authored-by: Valentyn Druzhynin <[email protected] >
Co-authored-by: Motov Yurii <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
5 months ago
Javier Sánchez Castro
df950111fe
✨ Show a clear error on attempt to include router into itself ( #14258 )
Co-authored-by: Javier Sánchez <[email protected] >
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Motov Yurii <[email protected] >
5 months ago
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>
5 months ago
Motov Yurii
227cb85a03
✅ Fix parameterized tests with snapshots ( #14875 )
5 months ago
Sebastián Ramírez
9f4ecf562c
✅ Add inline snapshot tests for OpenAPI before changes from Pydantic v2 ( #14864 )
5 months ago
pre-commit-ci-lite[bot]
5afc0c1751
🎨 Auto format
5 months ago
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%.
5 months ago
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.
5 months ago
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 <[email protected] >
5 months ago
Adarsh Bennur
34c0142517
Fix test syntax + ruff issues causing CI matrix failures
Co-authored-by: Cursor <[email protected] >
5 months ago
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.
5 months ago
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.
5 months ago
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
7 months ago
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.
7 months ago
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
7 months ago
Sebastián Ramírez
f9f7992604
♻️ Re-implement `on_event` in FastAPI for compatibility with the next Starlette, while keeping backwards compatibility ( #14851 )
5 months ago
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 <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
5 months ago
Albin Skott
97145588f5
✨ Add support for PEP695 `TypeAliasType` ( #13920 )
Co-authored-by: lokidev <[email protected] >
Co-authored-by: Motov Yurii <[email protected] >
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] >
5 months ago
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 <[email protected] >
Co-authored-by: Sebastián Ramírez <[email protected] >
5 months ago
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>
5 months ago
Mickaël Guérin
09f5941f0e
🐛 Fix TYPE_CHECKING annotations for Python 3.14 (PEP 649) ( #14789 )
5 months ago
Cecilia Madrid
1d96b3e3f1
🐛 Strip whitespaces from `Authorization` header credentials ( #14786 )
5 months ago