← or20_qwen27b_v2

fastapi_14978

failed NO_PATCH NO_PATCH UNSUBMITTED empty_patch(timeout) · 21 tool calls · 0 s · fastapi/fastapi

Task input

🔒️ Add `strict_content_type` checking for JSON requests

🔒️ Add `strict_content_type` checking for JSON requests

Tool calls (21)

#ToolArgumentsResult
1run_command
{
 "command": "grep -rn \"strict_content_type\" /workspace --include=*.py | head -30"
}
{"status": "ok", "stdout": "", "exit_code": 0}
full
{"status": "ok", "stdout": "", "exit_code": 0}
2run_command
{
 "command": "ls /workspace/fastapi; grep -rn \"jsonable_encoder\\|def json(\" /workspace/fastapi/routing.py | head"
}
{"status": "ok", "stdout": "", "exit_code": 0}
full
{"status": "ok", "stdout": "", "exit_code": 0}
3run_command
{
 "command": "ls /workspace; ls /workspace/fastapi 2>/dev/null | head"
}
{"status": "ok", "stdout": "", "exit_code": 0}
full
{"status": "ok", "stdout": "", "exit_code": 0}
4run_command
{
 "command": "pwd && ls -la /workspace 2>&1 | head -30; echo \"EXIT: $?\""
}
{"status": "ok", "stdout": "/private/workspace\nls: /tmp/swe_work/or20_qwen27b_v2/fastapi_14978/a/workspace: No such file or directory\nEXIT: 0\n", "exit_code":
full
{"status": "ok", "stdout": "/private/workspace\nls: /tmp/swe_work/or20_qwen27b_v2/fastapi_14978/a/workspace: No such file or directory\nEXIT: 0\n", "exit_code": 0}
5run_command
{
 "command": "ls -la /private/workspace 2>&1 | head -30"
}
{"status": "ok", "stdout": "ls: /private/workspace: No such file or directory\n", "exit_code": 0}
full
{"status": "ok", "stdout": "ls: /private/workspace: No such file or directory\n", "exit_code": 0}
6run_command
{
 "command": "ls -la 2>&1 | head -40; echo ---; ls / 2>&1 | head -30"
}
{"status": "ok", "stdout": "total 2328\ndrwx------@ 21 jp wheel 672 Sep 23 22:41 .\ndrwxr-xr-x@ 4 jp wheel 128 Sep 23 22:41 ..\ndrwxr-xr-x@ 12 jp wheel 384 Sep
full
{"status": "ok", "stdout": "total 2328\ndrwx------@  21 jp  wheel      672 Sep 23 22:41 .\ndrwxr-xr-x@   4 jp  wheel      128 Sep 23 22:41 ..\ndrwxr-xr-x@  12 jp  wheel      384 Sep 23 22:41 .git\ndrwxr-xr-x@   8 jp  wheel      256 Jul 15 08:13 .github\n-rw-r--r--@   1 jp  wheel      280 Jul 15 08:13 .gitignore\n-rw-r--r--@   1 jp  wheel     2263 Jul 15 08:13 .pre-commit-config.yaml\n-rw-r--r--@   1 jp  wheel        5 Jul 15 08:13 .python-version\n-rw-r--r--@   1 jp  wheel      614 Jul 15 08:13 CITATION.cff\n-rw-r--r--@   1 jp  wheel      127 Jul 15 08:13 CONTRIBUTING.md\ndrwxr-xr-x@  16 jp  wheel      512 Jul 15 08:13 docs\ndrwxr-xr-x@  74 jp  wheel     2368 Jul 15 08:13 docs_src\ndrwxr-xr-x@  30 jp  wheel      960 Jul 15 08:13 fastapi\ndrwxr-xr-x@   3 jp  wheel       96 Jul 15 08:13 fastapi-slim\n-rw-r--r--@   1 jp  wheel     1086 Jul 15 08:13 LICENSE\n-rw-r--r--@   1 jp  wheel    10106 Jul 15 08:13 pyproject.toml\n-rw-r--r--@   1 jp  wheel      109 Sep 23 22:41 pytest.ini\n-rw-r--r--@   1 jp  wheel    26877 Jul 15 08:13 README.md\ndrwxr-xr-x@  22 jp  wheel      704 Jul 15 08:13 scripts\n-rw-r--r--@   1 jp  wheel     1320 Jul 15 08:13 SECURITY.md\ndrwxr-xr-x@ 204 jp  wheel     6528 Jul 15 08:13 tests\n-rw-r--r--@   1 jp  wheel  1115736 Jul 15 08:13 uv.lock\n---\nApplications\nbin\ncores\ndev\netc\nhome\nLibrary\nopt\nprivate\nsbin\nSystem\ntmp\nUsers\nusr\nvar\nVolumes\n", "exit_code": 0}
7run_command
{
 "command": "grep -rn \"content_type\" fastapi/routing.py | head -20; echo ---; grep -rn \"def json\" fastapi/*.py | head"
}
{"status": "ok", "stdout": "fastapi/routing.py:371: content_type_value = request.headers.get(\"content-type\")\nfastapi/routing.py:372: if not content_type_valu
full
{"status": "ok", "stdout": "fastapi/routing.py:371:                        content_type_value = request.headers.get(\"content-type\")\nfastapi/routing.py:372:                        if not content_type_value:\nfastapi/routing.py:376:                            message[\"content-type\"] = content_type_value\n---\nfastapi/encoders.py:112:def jsonable_encoder(\n", "exit_code": 0}
8run_command
{
 "command": "sed -n 330,420p fastapi/routing.py"
}
{"status": "ok", "stdout": " dependency_overrides_provider: Any | None = None,\n embed_body_fields: bool = False,\n) -> Callable[[Request], Coroutine[Any, Any,
full
{"status": "ok", "stdout": "    dependency_overrides_provider: Any | None = None,\n    embed_body_fields: bool = False,\n) -> Callable[[Request], Coroutine[Any, Any, Response]]:\n    assert dependant.call is not None, \"dependant.call must be a function\"\n    is_coroutine = dependant.is_coroutine_callable\n    is_body_form = body_field and isinstance(body_field.field_info, params.Form)\n    if isinstance(response_class, DefaultPlaceholder):\n        actual_response_class: type[Response] = response_class.value\n    else:\n        actual_response_class = response_class\n\n    async def app(request: Request) -> Response:\n        response: Response | None = None\n        file_stack = request.scope.get(\"fastapi_middleware_astack\")\n        assert isinstance(file_stack, AsyncExitStack), (\n            \"fastapi_middleware_astack not found in request scope\"\n        )\n\n        # Extract endpoint context for error messages\n        endpoint_ctx = (\n            _extract_endpoint_context(dependant.call)\n            if dependant.call\n            else EndpointContext()\n        )\n\n        if dependant.path:\n            # For mounted sub-apps, include the mount path prefix\n            mount_path = request.scope.get(\"root_path\", \"\").rstrip(\"/\")\n            endpoint_ctx[\"path\"] = f\"{request.method} {mount_path}{dependant.path}\"\n\n        # Read body and auto-close files\n        try:\n            body: Any = None\n            if body_field:\n                if is_body_form:\n                    body = await request.form()\n                    file_stack.push_async_callback(body.close)\n                else:\n                    body_bytes = await request.body()\n                    if body_bytes:\n                        json_body: Any = Undefined\n                        content_type_value = request.headers.get(\"content-type\")\n                        if not content_type_value:\n                            json_body = await request.json()\n            
9run_command
{
 "command": "grep -n \"def __init__\\|def add_api_route\\|def get_request_handler\\|def add_api_websocket_route\\|def get\\b\\|def post\" fastapi/routing.py | head; echo ---; grep -n \"class HTTPException\\|class RequestValidationError\\|class WebSocketException\" fastapi/exceptions.py"
}
{"status": "ok", "stdout": "161: def __init__(self, cm: AbstractContextManager[_T]) -> None:\n222: def __init__(self, router: \"APIRouter\") -> None:\n318:def g
full
{"status": "ok", "stdout": "161:    def __init__(self, cm: AbstractContextManager[_T]) -> None:\n222:    def __init__(self, router: \"APIRouter\") -> None:\n318:def get_request_handler(\n530:    def __init__(\n572:    def __init__(\n752:    def __init__(\n1032:    def add_api_route(\n1173:    def add_api_websocket_route(\n1518:    def get(\n2277:    def post(\n---\n17:class HTTPException(StarletteHTTPException):\n86:class WebSocketException(StarletteWebSocketException):\n212:class RequestValidationError(ValidationException):\n", "exit_code": 0}
10run_command
{
 "command": "git log --oneline -5; python3 -c \"import fastapi, inspect; print(fastapi.__file__, fastapi.__version__)\""
}
{"status": "ok", "stdout": "e330734f baseline\n8ca96d6b \ud83d\udcdd Update release notes\nf44cad0b \u2b06 Bump flask from 3.1.2 to 3.1.3 (#14949)\n53704b33 \ud
full
{"status": "ok", "stdout": "e330734f baseline\n8ca96d6b \ud83d\udcdd Update release notes\nf44cad0b \u2b06 Bump flask from 3.1.2 to 3.1.3 (#14949)\n53704b33 \ud83d\udcdd Update release notes\n3b36e934 \u2b06 Update all dependencies to use `griffelib` instead of `griffe` (#14973)\n/private/workspace/fastapi/__init__.py 0.131.0\n", "exit_code": 0}
11run_command
{
 "command": "sed -n 752,830p fastapi/routing.py"
}
{"status": "ok", "stdout": " def __init__(\n self,\n *,\n prefix: Annotated[str, Doc(\"An optional path prefix for the router.\")] = \"\",\n tags: Annotated[\n
full
{"status": "ok", "stdout": "    def __init__(\n        self,\n        *,\n        prefix: Annotated[str, Doc(\"An optional path prefix for the router.\")] = \"\",\n        tags: Annotated[\n            list[str | Enum] | None,\n            Doc(\n                \"\"\"\n                A list of tags to be applied to all the *path operations* in this\n                router.\n\n                It will be added to the generated OpenAPI (e.g. visible at `/docs`).\n\n                Read more about it in the\n                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).\n                \"\"\"\n            ),\n        ] = None,\n        dependencies: Annotated[\n            Sequence[params.Depends] | None,\n            Doc(\n                \"\"\"\n                A list of dependencies (using `Depends()`) to be applied to all the\n                *path operations* in this router.\n\n                Read more about it in the\n                [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).\n                \"\"\"\n            ),\n        ] = None,\n        default_response_class: Annotated[\n            type[Response],\n            Doc(\n                \"\"\"\n                The default response class to be used.\n\n                Read more in the\n                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).\n                \"\"\"\n            ),\n        ] = Default(JSONResponse),\n        responses: Annotated[\n            dict[int | str, dict[str, Any]] | None,\n            Doc(\n                \"\"\"\n                Additional responses to be shown in OpenAPI.\n\n                It will be added to the generated OpenAPI (e.g. visible at `/docs`).\n\n   
12run_command
{
 "command": "sed -n 318,332p fastapi/routing.py"
}
{"status": "ok", "stdout": "def get_request_handler(\n dependant: Dependant,\n body_field: ModelField | None = None,\n status_code: int | None = None,\n respons
full
{"status": "ok", "stdout": "def get_request_handler(\n    dependant: Dependant,\n    body_field: ModelField | None = None,\n    status_code: int | None = None,\n    response_class: type[Response] | DefaultPlaceholder = Default(JSONResponse),\n    response_field: ModelField | None = None,\n    response_model_include: IncEx | None = None,\n    response_model_exclude: IncEx | None = None,\n    response_model_by_alias: bool = True,\n    response_model_exclude_unset: bool = False,\n    response_model_exclude_defaults: bool = False,\n    response_model_exclude_none: bool = False,\n    dependency_overrides_provider: Any | None = None,\n    embed_body_fields: bool = False,\n) -> Callable[[Request], Coroutine[Any, Any, Response]]:\n", "exit_code": 0}
13run_command
{
 "command": "sed -n 1032,1175p fastapi/routing.py"
}
{"status": "ok", "stdout": " def add_api_route(\n self,\n path: str,\n endpoint: Callable[..., Any],\n *,\n response_model: Any = Default(None),\n status_code:
full
{"status": "ok", "stdout": "    def add_api_route(\n        self,\n        path: str,\n        endpoint: Callable[..., Any],\n        *,\n        response_model: Any = Default(None),\n        status_code: int | None = None,\n        tags: list[str | Enum] | None = None,\n        dependencies: Sequence[params.Depends] | None = None,\n        summary: str | None = None,\n        description: str | None = None,\n        response_description: str = \"Successful Response\",\n        responses: dict[int | str, dict[str, Any]] | None = None,\n        deprecated: bool | None = None,\n        methods: set[str] | list[str] | None = None,\n        operation_id: str | None = None,\n        response_model_include: IncEx | None = None,\n        response_model_exclude: IncEx | None = None,\n        response_model_by_alias: bool = True,\n        response_model_exclude_unset: bool = False,\n        response_model_exclude_defaults: bool = False,\n        response_model_exclude_none: bool = False,\n        include_in_schema: bool = True,\n        response_class: type[Response] | DefaultPlaceholder = Default(JSONResponse),\n        name: str | None = None,\n        route_class_override: type[APIRoute] | None = None,\n        callbacks: list[BaseRoute] | None = None,\n        openapi_extra: dict[str, Any] | None = None,\n        generate_unique_id_function: Callable[[APIRoute], str]\n        | DefaultPlaceholder = Default(generate_unique_id),\n    ) -> None:\n        route_class = route_class_override or self.route_class\n        responses = responses or {}\n        combined_responses = {**self.responses, **responses}\n        current_response_class = get_value_or_default(\n            response_class, self.default_response_class\n        )\n        current_tags = self.tags.copy()\n        if tags:\n            current_tags.extend(tags)\n        current_dependencies = self.dependencies.copy()\n        if dependencies:\n            current_dependencies.extend(dependencies)\n        curren
14run_command
{
 "command": "sed -n 572,752p fastapi/routing.py"
}
{"status": "ok", "stdout": " def __init__(\n self,\n path: str,\n endpoint: Callable[..., Any],\n *,\n response_model: Any = Default(None),\n status_code: int |
full
{"status": "ok", "stdout": "    def __init__(\n        self,\n        path: str,\n        endpoint: Callable[..., Any],\n        *,\n        response_model: Any = Default(None),\n        status_code: int | None = None,\n        tags: list[str | Enum] | None = None,\n        dependencies: Sequence[params.Depends] | None = None,\n        summary: str | None = None,\n        description: str | None = None,\n        response_description: str = \"Successful Response\",\n        responses: dict[int | str, dict[str, Any]] | None = None,\n        deprecated: bool | None = None,\n        name: str | None = None,\n        methods: set[str] | list[str] | None = None,\n        operation_id: str | None = None,\n        response_model_include: IncEx | None = None,\n        response_model_exclude: IncEx | None = None,\n        response_model_by_alias: bool = True,\n        response_model_exclude_unset: bool = False,\n        response_model_exclude_defaults: bool = False,\n        response_model_exclude_none: bool = False,\n        include_in_schema: bool = True,\n        response_class: type[Response] | DefaultPlaceholder = Default(JSONResponse),\n        dependency_overrides_provider: Any | None = None,\n        callbacks: list[BaseRoute] | None = None,\n        openapi_extra: dict[str, Any] | None = None,\n        generate_unique_id_function: Callable[[\"APIRoute\"], str]\n        | DefaultPlaceholder = Default(generate_unique_id),\n    ) -> None:\n        self.path = path\n        self.endpoint = endpoint\n        if isinstance(response_model, DefaultPlaceholder):\n            return_annotation = get_typed_return_annotation(endpoint)\n            if lenient_issubclass(return_annotation, Response):\n                response_model = None\n            else:\n                response_model = return_annotation\n        self.response_model = response_model\n        self.summary = summary\n        self.response_description = response_description\n        self.deprecated = deprecated\n
15run_command
{
 "command": "sed -n 752,790p fastapi/routing.py; grep -n \"get_request_handler(\" fastapi/routing.py"
}
{"status": "ok", "stdout": " def __init__(\n self,\n *,\n prefix: Annotated[str, Doc(\"An optional path prefix for the router.\")] = \"\",\n tags: Annotated[\n
full
{"status": "ok", "stdout": "    def __init__(\n        self,\n        *,\n        prefix: Annotated[str, Doc(\"An optional path prefix for the router.\")] = \"\",\n        tags: Annotated[\n            list[str | Enum] | None,\n            Doc(\n                \"\"\"\n                A list of tags to be applied to all the *path operations* in this\n                router.\n\n                It will be added to the generated OpenAPI (e.g. visible at `/docs`).\n\n                Read more about it in the\n                [FastAPI docs for Path Operation Configuration](https://fastapi.tiangolo.com/tutorial/path-operation-configuration/).\n                \"\"\"\n            ),\n        ] = None,\n        dependencies: Annotated[\n            Sequence[params.Depends] | None,\n            Doc(\n                \"\"\"\n                A list of dependencies (using `Depends()`) to be applied to all the\n                *path operations* in this router.\n\n                Read more about it in the\n                [FastAPI docs for Bigger Applications - Multiple Files](https://fastapi.tiangolo.com/tutorial/bigger-applications/#include-an-apirouter-with-a-custom-prefix-tags-responses-and-dependencies).\n                \"\"\"\n            ),\n        ] = None,\n        default_response_class: Annotated[\n            type[Response],\n            Doc(\n                \"\"\"\n                The default response class to be used.\n\n                Read more in the\n                [FastAPI docs for Custom Response - HTML, Stream, File, others](https://fastapi.tiangolo.com/advanced/custom-response/#default-response-class).\n                \"\"\"\n318:def get_request_handler(\n702:        return get_request_handler(\n", "exit_code": 0}
16run_command
{
 "command": "sed -n 690,752p fastapi/routing.py"
}
{"status": "ok", "stdout": " self._flat_dependant = get_flat_dependant(self.dependant)\n self._embed_body_fields = _should_embed_body_fields(\n self._flat_depen
full
{"status": "ok", "stdout": "        self._flat_dependant = get_flat_dependant(self.dependant)\n        self._embed_body_fields = _should_embed_body_fields(\n            self._flat_dependant.body_params\n        )\n        self.body_field = get_body_field(\n            flat_dependant=self._flat_dependant,\n            name=self.unique_id,\n            embed_body_fields=self._embed_body_fields,\n        )\n        self.app = request_response(self.get_route_handler())\n\n    def get_route_handler(self) -> Callable[[Request], Coroutine[Any, Any, Response]]:\n        return get_request_handler(\n            dependant=self.dependant,\n            body_field=self.body_field,\n            status_code=self.status_code,\n            response_class=self.response_class,\n            response_field=self.response_field,\n            response_model_include=self.response_model_include,\n            response_model_exclude=self.response_model_exclude,\n            response_model_by_alias=self.response_model_by_alias,\n            response_model_exclude_unset=self.response_model_exclude_unset,\n            response_model_exclude_defaults=self.response_model_exclude_defaults,\n            response_model_exclude_none=self.response_model_exclude_none,\n            dependency_overrides_provider=self.dependency_overrides_provider,\n            embed_body_fields=self._embed_body_fields,\n        )\n\n    def matches(self, scope: Scope) -> tuple[Match, Scope]:\n        match, child_scope = super().matches(scope)\n        if match != Match.NONE:\n            child_scope[\"route\"] = self\n        return match, child_scope\n\n\nclass APIRouter(routing.Router):\n    \"\"\"\n    `APIRouter` class, used to group *path operations*, for example to structure\n    an app in multiple files. It would then be included in the `FastAPI` app, or\n    in another `APIRouter` (ultimately included in the app).\n\n    Read more about it in the\n    [FastAPI docs for Bigger Applications - Multiple Files](https:/
17run_command
{
 "command": "grep -rn \"strict_content_type\" /workspace 2>/dev/null | grep -v \".git/\" | head; echo ---; ls -la fastapi-slim; echo ---; grep -rn \"415\" fastapi/*.py | head"
}
{"status": "ok", "stdout": "---\ntotal 8\ndrwxr-xr-x@ 3 jp wheel 96 Jul 15 08:13 .\ndrwx------@ 21 jp wheel 672 Sep 23 22:41 ..\n-rw-r--r--@ 1 jp wheel 2101 Jul
full
{"status": "ok", "stdout": "---\ntotal 8\ndrwxr-xr-x@  3 jp  wheel    96 Jul 15 08:13 .\ndrwx------@ 21 jp  wheel   672 Sep 23 22:41 ..\n-rw-r--r--@  1 jp  wheel  2101 Jul 15 08:13 README.md\n---\n", "exit_code": 0}
18run_command
{
 "command": "ls docs/en/release-notes.md 2>/dev/null && head -60 docs/en/release-notes.md; grep -rn \"Unsupported Media Type\\|415\" docs/en/release-notes.md | head"
}
{"status": "ok", "stdout": "", "exit_code": 0}
full
{"status": "ok", "stdout": "", "exit_code": 0}
19run_command
{
 "command": "ls docs; ls docs/en 2>/dev/null | head; find docs -name \"release-notes*\" | head"
}
{"status": "ok", "stdout": "de\nen\nes\nfr\nja\nko\nlanguage_names.yml\nmissing-translation.md\npt\nru\ntr\nuk\nzh\nzh-hant\ndata\ndocs\nmkdocs.env.yml\nmkdocs.
full
{"status": "ok", "stdout": "de\nen\nes\nfr\nja\nko\nlanguage_names.yml\nmissing-translation.md\npt\nru\ntr\nuk\nzh\nzh-hant\ndata\ndocs\nmkdocs.env.yml\nmkdocs.yml\noverrides\ndocs/en/docs/release-notes.md\n", "exit_code": 0}
20run_command
{
 "command": "grep -n \"strict_content_type\\|content-type\\|content_type\" docs/en/docs/release-notes.md | head -20"
}
{"status": "ok", "stdout": "5202:In versions lower than `0.65.2`, FastAPI would try to read the request payload as JSON even if the `content-type` header sent w
full
{"status": "ok", "stdout": "5202:In versions lower than `0.65.2`, FastAPI would try to read the request payload as JSON even if the `content-type` header sent was not set to `application/json` or a compatible JSON media type (e.g. `application/geo+json`).\n5496:* \ud83d\udcdd Fix renamed parameter `content_type` typo. PR [#2135](https://github.com/tiangolo/fastapi/pull/2135) by [@TeoZosa](https://github.com/TeoZosa).\n6370:* Rename *path operation decorator* parameter `content_type` to `response_class`. PR [#183](https://github.com/tiangolo/fastapi/pull/183).\n", "exit_code": 0}
21run_command
{
 "command": "sed -n 1,80p docs/en/docs/release-notes.md"
}
{"status": "ok", "stdout": "---\nhide:\n - navigation\n---\n\n# Release Notes\n\n## Latest Changes\n\n### Internal\n\n* \u2b06 Bump flask from 3.1.2 to 3.1.3. P
full
{"status": "ok", "stdout": "---\nhide:\n  - navigation\n---\n\n# Release Notes\n\n## Latest Changes\n\n### Internal\n\n* \u2b06 Bump flask from 3.1.2 to 3.1.3. PR [#14949](https://github.com/fastapi/fastapi/pull/14949) by [@dependabot[bot]](https://github.com/apps/dependabot).\n* \u2b06 Update all dependencies to use `griffelib` instead of `griffe`. PR [#14973](https://github.com/fastapi/fastapi/pull/14973) by [@svlandeg](https://github.com/svlandeg).\n* \ud83d\udd28 Fix `FastAPI People` workflow. PR [#14951](https://github.com/fastapi/fastapi/pull/14951) by [@YuriiMotov](https://github.com/YuriiMotov).\n* \ud83d\udc77 Do not run codspeed with coverage as it's not tracked. PR [#14966](https://github.com/fastapi/fastapi/pull/14966) by [@tiangolo](https://github.com/tiangolo).\n* \ud83d\udc77 Do not include benchmark tests in coverage to speed up coverage processing. PR [#14965](https://github.com/fastapi/fastapi/pull/14965) by [@tiangolo](https://github.com/tiangolo).\n\n## 0.131.0\n\n### Breaking Changes\n\n* \ud83d\uddd1\ufe0f Deprecate `ORJSONResponse` and `UJSONResponse`. PR [#14964](https://github.com/fastapi/fastapi/pull/14964) by [@tiangolo](https://github.com/tiangolo).\n\n## 0.130.0\n\n### Features\n\n* \u2728 Serialize JSON response with Pydantic (in Rust), when there's a Pydantic return type or response model. PR [#14962](https://github.com/fastapi/fastapi/pull/14962) by [@tiangolo](https://github.com/tiangolo).\n    * This results in 2x (or more) performance increase for JSON responses.\n    * New docs: [Custom Response - JSON Performance](https://fastapi.tiangolo.com/advanced/custom-response/#json-performance).\n\n## 0.129.2\n\n### Internal\n\n* \u2b06\ufe0f Upgrade pytest. PR [#14959](https://github.com/fastapi/fastapi/pull/14959) by [@tiangolo](https://github.com/tiangolo).\n* \ud83d\udc77 Fix CI, do not attempt to publish `fastapi-slim`. PR [#14958](https://github.com/fastapi/fastapi/pull/14958) by [@tiangolo](https://github.com/tiangolo).\n* \u2796 D