Skip to content

Releases: tiangolo/fastapi

0.106.0

25 Dec 18:06
Compare
Choose a tag to compare

Breaking Changes

Using resources from dependencies with yield in background tasks is no longer supported.

This change is what supports the new features, read below. 🤓

Dependencies with yield, HTTPException and Background Tasks

Dependencies with yield now can raise HTTPException and other exceptions after yield. 🎉

Read the new docs here: Dependencies with yield and HTTPException.

from fastapi import Depends, FastAPI, HTTPException
from typing_extensions import Annotated

app = FastAPI()


data = {
    "plumbus": {"description": "Freshly pickled plumbus", "owner": "Morty"},
    "portal-gun": {"description": "Gun to create portals", "owner": "Rick"},
}


class OwnerError(Exception):
    pass


def get_username():
    try:
        yield "Rick"
    except OwnerError as e:
        raise HTTPException(status_code=400, detail=f"Onwer error: {e}")


@app.get("/items/{item_id}")
def get_item(item_id: str, username: Annotated[str, Depends(get_username)]):
    if item_id not in data:
        raise HTTPException(status_code=404, detail="Item not found")
    item = data[item_id]
    if item["owner"] != username:
        raise OwnerError(username)
    return item

Before FastAPI 0.106.0, raising exceptions after yield was not possible, the exit code in dependencies with yield was executed after the response was sent, so Exception Handlers would have already run.

This was designed this way mainly to allow using the same objects "yielded" by dependencies inside of background tasks, because the exit code would be executed after the background tasks were finished.

Nevertheless, as this would mean waiting for the response to travel through the network while unnecessarily holding a resource in a dependency with yield (for example a database connection), this was changed in FastAPI 0.106.0.

Additionally, a background task is normally an independent set of logic that should be handled separately, with its own resources (e.g. its own database connection).

If you used to rely on this behavior, now you should create the resources for background tasks inside the background task itself, and use internally only data that doesn't depend on the resources of dependencies with yield.

For example, instead of using the same database session, you would create a new database session inside of the background task, and you would obtain the objects from the database using this new session. And then instead of passing the object from the database as a parameter to the background task function, you would pass the ID of that object and then obtain the object again inside the background task function.

The sequence of execution before FastAPI 0.106.0 was like the diagram in the Release Notes for FastAPI 0.106.0.

The new execution flow can be found in the docs: Execution of dependencies with yield.

0.105.0

12 Dec 00:38
Compare
Choose a tag to compare

Features

  • ✨ Add support for multiple Annotated annotations, e.g. Annotated[str, Field(), Query()]. PR #10773 by @tiangolo.

Refactors

Docs

  • 📝 Tweak default suggested configs for generating clients. PR #10736 by @tiangolo.

Internal

0.104.1

30 Oct 10:05
Compare
Choose a tag to compare

Fixes

  • 📌 Pin Swagger UI version to 5.9.0 temporarily to handle a bug crashing it in 5.9.1. PR #10529 by @alejandraklachquin.
    • This is not really a bug in FastAPI but in Swagger UI, nevertheless pinning the version will work while a solution is found on the Swagger UI side.

Docs

  • 📝 Update data structure and render for external-links. PR #10495 by @tiangolo.
  • ✏️ Fix link to SPDX license identifier in docs/en/docs/tutorial/metadata.md. PR #10433 by @worldworm.
  • 📝 Update example validation error from Pydantic v1 to match Pydantic v2 in docs/en/docs/tutorial/path-params.md. PR #10043 by @giuliowaitforitdavide.
  • ✏️ Fix typos in emoji docs and in some source examples. PR #10438 by @afuetterer.
  • ✏️ Fix typo in docs/en/docs/reference/dependencies.md. PR #10465 by @suravshresth.
  • ✏️ Fix typos and rewordings in docs/en/docs/tutorial/body-nested-models.md. PR #10468 by @yogabonito.
  • 📝 Update docs, remove references to removed pydantic.Required in docs/en/docs/tutorial/query-params-str-validations.md. PR #10469 by @yogabonito.
  • ✏️ Fix typo in docs/en/docs/reference/index.md. PR #10467 by @tarsil.
  • 🔥 Remove unnecessary duplicated docstrings. PR #10484 by @tiangolo.

Internal

0.104.0

18 Oct 12:52
Compare
Choose a tag to compare

Features

Upgrades

  • ⬆️ Drop support for Python 3.7, require Python 3.8 or above. PR #10442 by @tiangolo.

Internal

0.103.2

28 Sep 20:02
Compare
Choose a tag to compare

Refactors

  • ⬆️ Upgrade compatibility with Pydantic v2.4, new renamed functions and JSON Schema input/output models with default values. PR #10344 by @tiangolo.

Translations

  • 🌐 Add Ukrainian translation for docs/uk/docs/tutorial/extra-data-types.md. PR #10132 by @ArtemKhymenko.
  • 🌐 Fix typos in French translations for docs/fr/docs/advanced/path-operation-advanced-configuration.md, docs/fr/docs/alternatives.md, docs/fr/docs/async.md, docs/fr/docs/features.md, docs/fr/docs/help-fastapi.md, docs/fr/docs/index.md, docs/fr/docs/python-types.md, docs/fr/docs/tutorial/body.md, docs/fr/docs/tutorial/first-steps.md, docs/fr/docs/tutorial/query-params.md. PR #10154 by @s-rigaud.
  • 🌐 Add Chinese translation for docs/zh/docs/async.md. PR #5591 by @mkdir700.
  • 🌐 Update Chinese translation for docs/tutorial/security/simple-oauth2.md. PR #3844 by @jaystone776.
  • 🌐 Add Korean translation for docs/ko/docs/deployment/cloud.md. PR #10191 by @Sion99.
  • 🌐 Add Japanese translation for docs/ja/docs/deployment/https.md. PR #10298 by @tamtam-fitness.
  • 🌐 Fix typo in Russian translation for docs/ru/docs/tutorial/body-fields.md. PR #10224 by @AlertRED.
  • 🌐 Add Polish translation for docs/pl/docs/help-fastapi.md. PR #10121 by @romabozhanovgithub.
  • 🌐 Add Russian translation for docs/ru/docs/tutorial/header-params.md. PR #10226 by @AlertRED.
  • 🌐 Add Chinese translation for docs/zh/docs/deployment/versions.md. PR #10276 by @xzmeng.

Internal

0.103.1

02 Sep 17:18
Compare
Choose a tag to compare

Fixes

  • 📌 Pin AnyIO to < 4.0.0 to handle an incompatibility while upgrading to Starlette 0.31.1. PR #10194 by @tiangolo.

Docs

  • ✏️ Fix validation parameter name in docs, from regex to pattern. PR #10085 by @pablodorrio.
  • ✏️ Fix indent format in docs/en/docs/deployment/server-workers.md. PR #10066 by @tamtam-fitness.
  • ✏️ Fix Pydantic examples in tutorial for Python types. PR #9961 by @rahulsalgare.
  • ✏️ Fix link to Pydantic docs in docs/en/docs/tutorial/extra-data-types.md. PR #10155 by @hasnatsajid.
  • ✏️ Fix typo in docs/en/docs/tutorial/handling-errors.md. PR #10170 by @poupapaa.
  • ✏️ Fix typo in docs/en/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md. PR #10172 by @ragul-kachiappan.

Translations

  • 🌐 Remove duplicate line in translation for docs/pt/docs/tutorial/path-params.md. PR #10126 by @LecoOliveira.
  • 🌐 Add Yoruba translation for docs/yo/docs/index.md. PR #10033 by @AfolabiOlaoluwa.
  • 🌐 Add Ukrainian translation for docs/uk/docs/python-types.md. PR #10080 by @rostik1410.
  • 🌐 Add Vietnamese translations for docs/vi/docs/tutorial/first-steps.md and docs/vi/docs/tutorial/index.md. PR #10088 by @magiskboy.
  • 🌐 Add Ukrainian translation for docs/uk/docs/alternatives.md. PR #10060 by @whysage.
  • 🌐 Add Ukrainian translation for docs/uk/docs/tutorial/index.md. PR #10079 by @rostik1410.
  • ✏️ Fix typos in docs/en/docs/how-to/separate-openapi-schemas.md and docs/en/docs/tutorial/schema-extra-example.md. PR #10189 by @xzmeng.
  • 🌐 Add Chinese translation for docs/zh/docs/advanced/generate-clients.md. PR #9883 by @funny-cat-happy.

Refactors

  • ✏️ Fix typos in comment in fastapi/applications.py. PR #10045 by @AhsanSheraz.
  • ✅ Add missing test for OpenAPI examples, it was missing in coverage. PR #10188 by @tiangolo.

Internal

0.103.0

26 Aug 18:14
Compare
Choose a tag to compare

Features

Docs

  • 📝 Add note to docs about Separate Input and Output Schemas with FastAPI version. PR #10150 by @tiangolo.

0.102.0

25 Aug 19:22
Compare
Choose a tag to compare

Features

Refactors

Docs

  • 📝 Add new docs section, How To - Recipes, move docs that don't have to be read by everyone to How To. PR #10114 by @tiangolo.
  • 📝 Update Advanced docs, add links to sponsor courses. PR #10113 by @tiangolo.
  • 📝 Update docs for generating clients. PR #10112 by @tiangolo.
  • 📝 Tweak MkDocs and add redirects. PR #10111 by @tiangolo.
  • 📝 Restructure docs for cloud providers, include links to sponsors. PR #10110 by @tiangolo.

Internal

0.101.1

14 Aug 10:08
Compare
Choose a tag to compare

Fixes

  • ✨ Add ResponseValidationError printable details, to show up in server error logs. PR #10078 by @tiangolo.

Refactors

  • ✏️ Fix typo in deprecation warnings in fastapi/params.py. PR #9854 by @russbiggs.
  • ✏️ Fix typos in comments on internal code in fastapi/concurrency.py and fastapi/routing.py. PR #9590 by @ElliottLarsen.

Docs

Translations

  • 🌐 Add Japanese translation for docs/ja/docs/deployment/concepts.md. PR #10062 by @tamtam-fitness.
  • 🌐 Add Japanese translation for docs/ja/docs/deployment/server-workers.md. PR #10064 by @tamtam-fitness.
  • 🌐 Update Japanese translation for docs/ja/docs/deployment/docker.md. PR #10073 by @tamtam-fitness.
  • 🌐 Add Ukrainian translation for docs/uk/docs/fastapi-people.md. PR #10059 by @rostik1410.
  • 🌐 Add Ukrainian translation for docs/uk/docs/tutorial/cookie-params.md. PR #10032 by @rostik1410.
  • 🌐 Add Russian translation for docs/ru/docs/deployment/docker.md. PR #9971 by @Xewus.
  • 🌐 Add Vietnamese translation for docs/vi/docs/python-types.md. PR #10047 by @magiskboy.
  • 🌐 Add Russian translation for docs/ru/docs/tutorial/dependencies/global-dependencies.md. PR #9970 by @dudyaosuplayer.
  • 🌐 Add Urdu translation for docs/ur/docs/benchmarks.md. PR #9974 by @AhsanSheraz.

Internal

0.101.0

04 Aug 21:04
Compare
Choose a tag to compare

Features

  • ✨ Enable Pydantic's serialization mode for responses, add support for Pydantic's computed_field, better OpenAPI for response models, proper required attributes, better generated clients. PR #10011 by @tiangolo.

Refactors

  • ✅ Fix tests for compatibility with pydantic 2.1.1. PR #9943 by @dmontagu.
  • ✅ Fix test error in Windows for jsonable_encoder. PR #9840 by @iudeen.

Upgrades

  • 📌 Do not allow Pydantic 2.1.0 that breaks (require 2.1.1). PR #10012 by @tiangolo.

Translations

  • 🌐 Add Russian translation for docs/ru/docs/tutorial/security/index.md. PR #9963 by @eVery1337.
  • 🌐 Remove Vietnamese note about missing translation. PR #9957 by @tiangolo.

Internal