Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-fastapi for openSUSE:Factory checked in at 2026-04-08 17:13:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-fastapi (Old) and /work/SRC/openSUSE:Factory/.python-fastapi.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-fastapi" Wed Apr 8 17:13:28 2026 rev:49 rq:1344811 version:0.135.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-fastapi/python-fastapi.changes 2026-03-30 18:30:54.654101681 +0200 +++ /work/SRC/openSUSE:Factory/.python-fastapi.new.21863/python-fastapi.changes 2026-04-08 17:13:34.338597232 +0200 @@ -1,0 +2,7 @@ +Mon Apr 6 21:34:31 UTC 2026 - Dirk Müller <[email protected]> + +- update to 0.135.3: + * Add support for `@app.vibe()`. PR #15280 by @tiangolo. + * Fix typo for `client_secret` in OAuth2 form docstrings. + +------------------------------------------------------------------- Old: ---- fastapi-0.135.2.tar.gz New: ---- fastapi-0.135.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-fastapi.spec ++++++ --- /var/tmp/diff_new_pack.eJozDd/_old 2026-04-08 17:13:35.042626177 +0200 +++ /var/tmp/diff_new_pack.eJozDd/_new 2026-04-08 17:13:35.042626177 +0200 @@ -31,7 +31,7 @@ %endif %{?sle15_python_module_pythons} Name: python-fastapi%{psuffix} -Version: 0.135.2 +Version: 0.135.3 Release: 0 Summary: FastAPI framework License: MIT ++++++ fastapi-0.135.2.tar.gz -> fastapi-0.135.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/PKG-INFO new/fastapi-0.135.3/PKG-INFO --- old/fastapi-0.135.2/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/fastapi-0.135.3/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: fastapi -Version: 0.135.2 +Version: 0.135.3 Summary: FastAPI framework, high performance, easy to learn, fast to code, ready for production Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <[email protected]> License-Expression: MIT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/docs_src/vibe/tutorial001_py310.py new/fastapi-0.135.3/docs_src/vibe/tutorial001_py310.py --- old/fastapi-0.135.2/docs_src/vibe/tutorial001_py310.py 1970-01-01 01:00:00.000000000 +0100 +++ new/fastapi-0.135.3/docs_src/vibe/tutorial001_py310.py 2026-04-01 18:23:54.173744000 +0200 @@ -0,0 +1,12 @@ +from typing import Any + +from fastapi import FastAPI + +app = FastAPI() + + [email protected]( + "/vibe/", + prompt="pls return json of users from database. make no mistakes", +) +async def ai_vibes(body: Any): ... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/fastapi/__init__.py new/fastapi-0.135.3/fastapi/__init__.py --- old/fastapi-0.135.2/fastapi/__init__.py 2026-03-23 15:12:36.013052200 +0100 +++ new/fastapi-0.135.3/fastapi/__init__.py 2026-04-01 18:23:54.174515500 +0200 @@ -1,6 +1,6 @@ """FastAPI framework, high performance, easy to learn, fast to code, ready for production""" -__version__ = "0.135.2" +__version__ = "0.135.3" from starlette import status as status diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/fastapi/applications.py new/fastapi-0.135.3/fastapi/applications.py --- old/fastapi-0.135.2/fastapi/applications.py 2026-03-23 15:12:36.013278200 +0100 +++ new/fastapi-0.135.3/fastapi/applications.py 2026-04-01 18:23:54.174717200 +0200 @@ -10,7 +10,11 @@ request_validation_exception_handler, websocket_request_validation_exception_handler, ) -from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError +from fastapi.exceptions import ( + FastAPIError, + RequestValidationError, + WebSocketRequestValidationError, +) from fastapi.logger import logger from fastapi.middleware.asyncexitstack import AsyncExitStackMiddleware from fastapi.openapi.docs import ( @@ -4559,6 +4563,60 @@ generate_unique_id_function=generate_unique_id_function, ) + def vibe( + self, + path: Annotated[ + str, + Doc( + """ + The URL path to be used for this *path operation*. + + For example, in `http://example.com/vibes`, the path is `/vibes`. + """ + ), + ], + *, + prompt: Annotated[ + str, + Doc( + """ + The prompt to send to the LLM provider along with the payload. + + This tells the LLM what to do with the request body. + """ + ), + ] = "", + ) -> Callable[[DecoratedCallable], DecoratedCallable]: + """ + Add a *vibe coding path operation* that receives any HTTP method + and any payload. + + It's intended to receive the request and send the payload directly + to an LLM provider, and return the response as is. + + Embrace the freedom and flexibility of not having any data validation, + documentation, or serialization. + + ## Example + + ```python + from typing import Any + + from fastapi import FastAPI + + app = FastAPI() + + + @app.vibe( + "/vibe/", + prompt="pls return json of users from database. make no mistakes", + ) + async def ai_vibes(body: Any): + ... + ``` + """ + raise FastAPIError("Are you kidding me? Happy April Fool's") + def websocket_route( self, path: str, name: str | None = None ) -> Callable[[DecoratedCallable], DecoratedCallable]: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/fastapi/security/oauth2.py new/fastapi-0.135.3/fastapi/security/oauth2.py --- old/fastapi-0.135.2/fastapi/security/oauth2.py 2026-03-23 15:12:36.015823100 +0100 +++ new/fastapi-0.135.3/fastapi/security/oauth2.py 2026-04-01 18:23:54.177489300 +0200 @@ -143,7 +143,7 @@ Form(json_schema_extra={"format": "password"}), Doc( """ - If there's a `client_password` (and a `client_id`), they can be sent + If there's a `client_secret` (and a `client_id`), they can be sent as part of the form fields. But the OAuth2 specification recommends sending the `client_id` and `client_secret` (if any) using HTTP Basic auth. @@ -309,7 +309,7 @@ Form(), Doc( """ - If there's a `client_password` (and a `client_id`), they can be sent + If there's a `client_secret` (and a `client_id`), they can be sent as part of the form fields. But the OAuth2 specification recommends sending the `client_id` and `client_secret` (if any) using HTTP Basic auth. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/pyproject.toml new/fastapi-0.135.3/pyproject.toml --- old/fastapi-0.135.2/pyproject.toml 2026-03-23 15:12:39.849004300 +0100 +++ new/fastapi-0.135.3/pyproject.toml 2026-04-01 18:23:56.667643000 +0200 @@ -52,7 +52,7 @@ "typing-inspection>=0.4.2", "annotated-doc>=0.0.2", ] -version = "0.135.2" +version = "0.135.3" [project.urls] Homepage = "https://github.com/fastapi/fastapi" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/scripts/lint.sh new/fastapi-0.135.3/scripts/lint.sh --- old/fastapi-0.135.2/scripts/lint.sh 2026-03-23 15:12:36.016618000 +0100 +++ new/fastapi-0.135.3/scripts/lint.sh 2026-04-01 18:23:54.178063000 +0200 @@ -4,5 +4,6 @@ set -x mypy fastapi +ty check fastapi ruff check fastapi tests docs_src scripts ruff format fastapi tests --check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fastapi-0.135.2/tests/test_vibe.py new/fastapi-0.135.3/tests/test_vibe.py --- old/fastapi-0.135.2/tests/test_vibe.py 1970-01-01 01:00:00.000000000 +0100 +++ new/fastapi-0.135.3/tests/test_vibe.py 2026-04-01 18:23:54.208743300 +0200 @@ -0,0 +1,17 @@ +from typing import Any + +import pytest +from fastapi import FastAPI +from fastapi.exceptions import FastAPIError + + +def test_vibe_raises(): + with pytest.raises(FastAPIError, match="Are you kidding me"): + app = FastAPI() + + @app.vibe( + "/vibe/", + prompt="pls return json of users from database. make no mistakes", + ) + async def ai_vibes(body: Any): # pragma: nocover + pass
