resolved RESOLVED PASS ยท 25 tool calls ยท 112 s ยท fastapi/fastapi
๐ Add a custom `FastAPIDeprecationWarning` ๐ Add a custom `FastAPIDeprecationWarning` and use it for deprecated logic, like Pydantic v1 models. Motivated by: https://sethmlarson.dev/deprecations-via-warnings-dont-work-for-python-libraries
| # | Tool | Arguments | Result |
|---|---|---|---|
| 1 | run_command | {
"command": "grep -rn \"DeprecationWarning\" fastapi | head -20"
} | {"status": "ok", "stdout": "fastapi/params.py:78: category=DeprecationWarning,\nfastapi/params.py:108: category=DeprecationWarning,\nfastapi/params.py:533: catefull{"status": "ok", "stdout": "fastapi/params.py:78: category=DeprecationWarning,\nfastapi/params.py:108: category=DeprecationWarning,\nfastapi/params.py:533: category=DeprecationWarning,\nfastapi/params.py:563: category=DeprecationWarning,\nfastapi/dependencies/utils.py:330: category=DeprecationWarning,\nfastapi/openapi/utils.py:220: DeprecationWarning,\nfastapi/utils.py:200: DeprecationWarning,\nfastapi/routing.py:643: category=DeprecationWarning,\nfastapi/routing.py:683: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:66: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:96: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:506: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:536: category=DeprecationWarning,\n", "stderr": "", "exit_code": 0} |
| 2 | run_command | {
"command": "ls fastapi/__init__.py fastapi/utils.py"
} | {"status": "ok", "stdout": "fastapi/__init__.py\nfastapi/utils.py\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "fastapi/__init__.py\nfastapi/utils.py\n", "stderr": "", "exit_code": 0} |
| 3 | run_command | {
"command": "cat fastapi/__init__.py"
} | {"status": "ok", "stdout": "\"\"\"FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\"\"\n\n__version__ = \"0.127.0\"\n\nffull{"status": "ok", "stdout": "\"\"\"FastAPI framework, high performance, easy to learn, fast to code, ready for production\"\"\"\n\n__version__ = \"0.127.0\"\n\nfrom starlette import status as status\n\nfrom .applications import FastAPI as FastAPI\nfrom .background import BackgroundTasks as BackgroundTasks\nfrom .datastructures import UploadFile as UploadFile\nfrom .exceptions import HTTPException as HTTPException\nfrom .exceptions import WebSocketException as WebSocketException\nfrom .param_functions import Body as Body\nfrom .param_functions import Cookie as Cookie\nfrom .param_functions import Depends as Depends\nfrom .param_functions import File as File\nfrom .param_functions import Form as Form\nfrom .param_functions import Header as Header\nfrom .param_functions import Path as Path\nfrom .param_functions import Query as Query\nfrom .param_functions import Security as Security\nfrom .requests import Request as Request\nfrom .responses import Response as Response\nfrom .routing import APIRouter as APIRouter\nfrom .websockets import WebSocket as WebSocket\nfrom .websockets import WebSocketDisconnect as WebSocketDisconnect\n", "stderr": "", "exit_code": 0} |
| 4 | run_command | {
"command": "cat fastapi/utils.py"
} | {"status": "ok", "stdout": "import re\nimport warnings\nfrom collections.abc import MutableMapping\nfrom typing import (\n TYPE_CHECKING,\n Any,\n Optional,\n Ufull{"status": "ok", "stdout": "import re\nimport warnings\nfrom collections.abc import MutableMapping\nfrom typing import (\n TYPE_CHECKING,\n Any,\n Optional,\n Union,\n cast,\n)\nfrom weakref import WeakKeyDictionary\n\nimport fastapi\nfrom fastapi._compat import (\n BaseConfig,\n ModelField,\n PydanticSchemaGenerationError,\n Undefined,\n UndefinedType,\n Validator,\n annotation_is_pydantic_v1,\n lenient_issubclass,\n may_v1,\n)\nfrom fastapi.datastructures import DefaultPlaceholder, DefaultType\nfrom pydantic import BaseModel\nfrom pydantic.fields import FieldInfo\nfrom typing_extensions import Literal\n\nfrom ._compat import v2\n\nif TYPE_CHECKING: # pragma: nocover\n from .routing import APIRoute\n\n# Cache for `create_cloned_field`\n_CLONED_TYPES_CACHE: MutableMapping[type[BaseModel], type[BaseModel]] = (\n WeakKeyDictionary()\n)\n\n\ndef is_body_allowed_for_status_code(status_code: Union[int, str, None]) -> bool:\n if status_code is None:\n return True\n # Ref: https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#patterned-fields-1\n if status_code in {\n \"default\",\n \"1XX\",\n \"2XX\",\n \"3XX\",\n \"4XX\",\n \"5XX\",\n }:\n return True\n current_status_code = int(status_code)\n return not (current_status_code < 200 or current_status_code in {204, 205, 304})\n\n\ndef get_path_param_names(path: str) -> set[str]:\n return set(re.findall(\"{(.*?)}\", path))\n\n\n_invalid_args_message = (\n \"Invalid args for response field! Hint: \"\n \"check that {type_} is a valid Pydantic field type. \"\n \"If you are using a return type annotation that is not a valid Pydantic \"\n \"field (e.g. Union[Response, dict, None]) you can disable generating the \"\n \"response model from the type annotation with the path operation decorator \"\n \"parameter response_model=None. Read more: \"\n \"https://fastapi.tiang |
| 5 | run_command | {
"command": "ls fastapi/exceptions.py"
} | {"status": "ok", "stdout": "fastapi/exceptions.py\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "fastapi/exceptions.py\n", "stderr": "", "exit_code": 0} |
| 6 | run_command | {
"command": "cat fastapi/exceptions.py"
} | {"status": "ok", "stdout": "from collections.abc import Sequence\nfrom typing import Annotated, Any, Optional, TypedDict, Union\n\nfrom annotated_doc import Docfull{"status": "ok", "stdout": "from collections.abc import Sequence\nfrom typing import Annotated, Any, Optional, TypedDict, Union\n\nfrom annotated_doc import Doc\nfrom pydantic import BaseModel, create_model\nfrom starlette.exceptions import HTTPException as StarletteHTTPException\nfrom starlette.exceptions import WebSocketException as StarletteWebSocketException\n\n\nclass EndpointContext(TypedDict, total=False):\n function: str\n path: str\n file: str\n line: int\n\n\nclass HTTPException(StarletteHTTPException):\n \"\"\"\n An HTTP exception you can raise in your own code to show errors to the client.\n\n This is for client errors, invalid authentication, invalid data, etc. Not for server\n errors in your code.\n\n Read more about it in the\n [FastAPI docs for Handling Errors](https://fastapi.tiangolo.com/tutorial/handling-errors/).\n\n ## Example\n\n ```python\n from fastapi import FastAPI, HTTPException\n\n app = FastAPI()\n\n items = {\"foo\": \"The Foo Wrestlers\"}\n\n\n @app.get(\"/items/{item_id}\")\n async def read_item(item_id: str):\n if item_id not in items:\n raise HTTPException(status_code=404, detail=\"Item not found\")\n return {\"item\": items[item_id]}\n ```\n \"\"\"\n\n def __init__(\n self,\n status_code: Annotated[\n int,\n Doc(\n \"\"\"\n HTTP status code to send to the client.\n \"\"\"\n ),\n ],\n detail: Annotated[\n Any,\n Doc(\n \"\"\"\n Any data to be sent to the client in the `detail` key of the JSON\n response.\n \"\"\"\n ),\n ] = None,\n headers: Annotated[\n Optional[dict[str, str]],\n Doc(\n \"\"\"\n Any headers to send to the client in the response.\n \"\"\"\n ),\n |
| 7 | run_command | {
"command": "grep -rn \"DeprecationWarning\" fastapi/params.py fastapi/dependencies/utils.py fastapi/openapi/utils.py fastapi/utils.py fastapi/routing.py fastapi/temp_pydantic_v1_params.py"
} | {"status": "ok", "stdout": "fastapi/params.py:78: category=DeprecationWarning,\nfastapi/params.py:108: category=DeprecationWarning,\nfastapi/params.py:533: catefull{"status": "ok", "stdout": "fastapi/params.py:78: category=DeprecationWarning,\nfastapi/params.py:108: category=DeprecationWarning,\nfastapi/params.py:533: category=DeprecationWarning,\nfastapi/params.py:563: category=DeprecationWarning,\nfastapi/dependencies/utils.py:330: category=DeprecationWarning,\nfastapi/openapi/utils.py:220: DeprecationWarning,\nfastapi/utils.py:200: DeprecationWarning,\nfastapi/routing.py:643: category=DeprecationWarning,\nfastapi/routing.py:683: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:66: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:96: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:506: category=DeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:536: category=DeprecationWarning,\n", "stderr": "", "exit_code": 0} |
| 8 | run_command | {
"command": "cd /workspace && python3 - <<'PY'\nfrom pathlib import Path\np = Path(\"fastapi/exceptions.py\"); s = p.read_text()\n# Add FastAPIDeprecationWarning to fastapi/exceptions.py\n# It should be a subclass of DeprecationWarning\n# Since DeprecationWarning is a built-in, we just need to define the class.\n# We should place it near other exception definitions.\n# Let's find a good place.\nimport warnings\n# DeprecationWarning is a built-in, but let's check where to put it.\n# I'll put it before FastAPIError.\n\nold = \"\"\"class FastAPIError(RuntimeError):\"\"\"\nnew = \"\"\"class FastAPIDeprecationWarning(DeprecationWarning):\n \\\"\\\"\\\"\n A deprecation warning specifically for FastAPI.\n \\\"\\\"\\\"\n\n\nclass FastAPIError(RuntimeError):\"\"\"\nassert s.count(old) == 1\nt = s.replace(old, new)\np.write_text(t)\nPY\n"
} | {"status": "ok", "stdout": "", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "", "stderr": "", "exit_code": 0} |
| 9 | run_command | {
"command": "sed -n '100,110p' fastapi/exceptions.py"
} | {"status": "ok", "stdout": "\n @app.websocket(\"/items/{item_id}/ws\")\n async def websocket_endpoint(\n *,\n websocket: WebSocket,\n session: Annotated[str | Nfull{"status": "ok", "stdout": "\n @app.websocket(\"/items/{item_id}/ws\")\n async def websocket_endpoint(\n *,\n websocket: WebSocket,\n session: Annotated[str | None, Cookie()] = None,\n item_id: str,\n ):\n if session is None:\n raise WebSocketException(code=status.WS_1008_POLICY_VIOLATION)\n await websocket.accept()\n", "stderr": "", "exit_code": 0} |
| 10 | run_command | {
"command": "grep -n \"class FastAPIDeprecationWarning\" fastapi/exceptions.py"
} | {"status": "ok", "stdout": "151:class FastAPIDeprecationWarning(DeprecationWarning):\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "151:class FastAPIDeprecationWarning(DeprecationWarning):\n", "stderr": "", "exit_code": 0} |
| 11 | run_command | {
"command": "sed -n '150,160p' fastapi/exceptions.py"
} | {"status": "ok", "stdout": "\nclass FastAPIDeprecationWarning(DeprecationWarning):\n \"\"\"\n A deprecation warning specifically for FastAPI.\n \"\"\"\n\n\nclasfull{"status": "ok", "stdout": "\nclass FastAPIDeprecationWarning(DeprecationWarning):\n \"\"\"\n A deprecation warning specifically for FastAPI.\n \"\"\"\n\n\nclass FastAPIError(RuntimeError):\n \"\"\"\n A generic, FastAPI-specific error.\n \"\"\"\n", "stderr": "", "exit_code": 0} |
| 12 | run_command | {
"command": "python3 - <<'PY'\nimport re\nimport os\n\nfiles = [\n \"fastapi/params.py\",\n \"fastapi/dependencies/utils.py\",\n \"fastapi/openapi/utils.py\",\n \"fastapi/utils.py\",\n \"fastapi/routing.py\",\n \"fastapi/temp_pydantic_v1_params.py\",\n]\n\nfor file_path in files:\n with open(file_path, \"r\") as f:\n content = f.read()\n \n if \"DeprecationWarning\" in content:\n print(f\"Updating {file_path}...\")\n # Replace 'category=DeprecationWarning' with 'category=FastAPIDeprecationWarning'\n # We also need to make sure FastAPIDeprecationWarning is imported.\n # It's in fastapi.exceptions.\n \n new_content = content.replace(\"category=DeprecationWarning\", \"category=FastAPIDeprecationWarning\")\n new_content = new_content.replace(\"DeprecationWarning,\", \"FastAPIDeprecationWarning,\")\n \n # Check if import is needed.\n # If the file already imports from fastapi.exceptions, we can add it there.\n # If not, we add 'from fastapi.exceptions import FastAPIDeprecationWarning'\n \n if \"from fastapi.exceptions import\" in new_content:\n # Find where it's imported from\n import_match = re.search(r\"from fastapi\\.exceptions import (.+)\", new_content)\n if import_match:\n imports = import_match.group(1)\n if \"FastAPIDeprecationWarning\" not in imports:\n # Add it to the imports\n new_content = new_content.replace(\n f\"from fastapi.exceptions import {imports}\",\n f\"from fastapi.exceptions import {imports}, FastAPIDeprecationWarning\"\n )\n elif \"import fastapi.exceptions\" in new_content:\n # This is less common, but possible\n pass\n else:\n # Add import at the top\n # Find a good place for imports\n # Usually after other fastapi imports\n new_content = \"from fastapi.exceptions import FastAPIDeprecationWarning\\n\" + new_content\n \n with open(file_path, \"w\") as f:\n f.write(new_content)\nPY\n"
} | {"status": "ok", "stdout": "Updating fastapi/params.py...\nUpdating fastapi/dependencies/utils.py...\nUpdating fastapi/openapi/utils.py...\nUpdating fastapi/utifull{"status": "ok", "stdout": "Updating fastapi/params.py...\nUpdating fastapi/dependencies/utils.py...\nUpdating fastapi/openapi/utils.py...\nUpdating fastapi/utils.py...\nUpdating fastapi/routing.py...\nUpdating fastapi/temp_pydantic_v1_params.py...\n", "stderr": "", "exit_code": 0} |
| 13 | run_command | {
"command": "grep -rn \"FastAPIDeprecationWarning\" fastapi | head -20"
} | {"status": "ok", "stdout": "fastapi/params.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/params.py:79: category=FastAPIFastAPIDeprecatifull{"status": "ok", "stdout": "fastapi/params.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/params.py:79: category=FastAPIFastAPIDeprecationWarning,\nfastapi/params.py:109: category=FastAPIFastAPIDeprecationWarning,\nfastapi/params.py:534: category=FastAPIFastAPIDeprecationWarning,\nfastapi/params.py:564: category=FastAPIFastAPIDeprecationWarning,\nfastapi/dependencies/utils.py:54:from fastapi.exceptions import DependencyScopeError, FastAPIDeprecationWarning\nfastapi/dependencies/utils.py:330: category=FastAPIFastAPIDeprecationWarning,\nfastapi/openapi/utils.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/openapi/utils.py:221: FastAPIDeprecationWarning,\nfastapi/utils.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/utils.py:201: FastAPIDeprecationWarning,\nfastapi/routing.py:48:from fastapi.exceptions import (, FastAPIDeprecationWarning\nfastapi/routing.py:643: category=FastAPIFastAPIDeprecationWarning,\nfastapi/routing.py:683: category=FastAPIFastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/temp_pydantic_v1_params.py:67: category=FastAPIFastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:97: category=FastAPIFastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:507: category=FastAPIFastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:537: category=FastAPIFastAPIDeprecationWarning,\nfastapi/exceptions.py:151:class FastAPIDeprecationWarning(DeprecationWarning):\n", "stderr": "", "exit_code": 0} |
| 14 | run_command | {
"command": "# Oh, I see \"FastAPIFastAPIDeprecationWarning\" in the output.\n# My script had a bug: new_content = content.replace(\"category=DeprecationWarning\", \"category=FastAPIDeprecationWarning\")\n# Wait, no. \"category=DeprecationWarning\" becomes \"category=FastAPIDeprecationWarning\".\n# But then \"DeprecationWarning,\" becomes \"FastAPIDeprecationWarning,\".\n# If the code had \"category=DeprecationWarning,\" it would have been replaced twice.\n\n# Let's check fastapi/params.py:79: category=FastAPIFastAPIDeprecationWarning,\n# Original was likely category=DeprecationWarning,\n\n# I need to fix this.\npython3 - <<'PY'\nimport re\nimport os\n\nfiles = [\n \"fastapi/params.py\",\n \"fastapi/dependencies/utils.py\",\n \"fastapi/openapi/utils.py\",\n \"fastapi/utils.py\",\n \"fastapi/routing.py\",\n \"fastapi/temp_pydantic_v1_params.py\",\n]\n\nfor file_path in files:\n with open(file_path, \"r\") as f:\n content = f.read()\n \n # Fix FastAPIFastAPIDeprecationWarning\n content = content.replace(\"FastAPIFastAPIDeprecationWarning\", \"FastAPIDeprecationWarning\")\n \n # Fix routing.py import: \"from fastapi.exceptions import (, FastAPIDeprecationWarning\"\n # This happened because of how I handled imports.\n \n with open(file_path, \"w\") as f:\n f.write(content)\nPY\n"
} | {"status": "ok", "stdout": "", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "", "stderr": "", "exit_code": 0} |
| 15 | run_command | {
"command": "grep -n \"from fastapi.exceptions import\" fastapi/routing.py"
} | {"status": "ok", "stdout": "48:from fastapi.exceptions import (, FastAPIDeprecationWarning\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "48:from fastapi.exceptions import (, FastAPIDeprecationWarning\n", "stderr": "", "exit_code": 0} |
| 16 | run_command | {
"command": "cd /workspace && python3 - <<'PY'\nfrom pathlib import Path\np = Path(\"fastapi/routing.py\")\ns = p.read_text()\n\n# Fix the broken import in fastapi/routing.py\n# Looking at the file content around line 48\n# Let's see what's actually there\nimport re\n\n# Use a regex to fix the broken import.\n# It looks like \"from fastapi.exceptions import (, FastAPIDeprecationWarning\"\n# We want \"from fastapi.exceptions import FastAPIDeprecationWarning\"\n# But wait, what was before the comma?\n# Let's check the file content.\nPY\n"
} | {"status": "ok", "stdout": "", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "", "stderr": "", "exit_code": 0} |
| 17 | run_command | {
"command": "sed -n '40,55p' fastapi/routing.py"
} | {"status": "ok", "stdout": " get_body_field,\n get_dependant,\n get_flat_dependant,\n get_parameterless_sub_dependant,\n get_typed_return_annotation,\n solve_defull{"status": "ok", "stdout": " get_body_field,\n get_dependant,\n get_flat_dependant,\n get_parameterless_sub_dependant,\n get_typed_return_annotation,\n solve_dependencies,\n)\nfrom fastapi.encoders import jsonable_encoder\nfrom fastapi.exceptions import (, FastAPIDeprecationWarning\n EndpointContext,\n FastAPIError,\n RequestValidationError,\n ResponseValidationError,\n WebSocketRequestValidationError,\n)\nfrom fastapi.types import DecoratedCallable, IncEx\n", "stderr": "", "exit_code": 0} |
| 18 | run_command | {
"command": "cd /workspace && python3 - <<'PY'\nfrom pathlib import Path\np = Path(\"fastapi/routing.py\")\ns = p.read_text()\n# The broken import is:\n# from fastapi.exceptions import (, FastAPIDeprecationWarning\n# EndpointContext,\n# FastAPIError,\n# RequestValidationError,\n# ResponseValidationError,\n# WebSocketRequestValidationError,\n# )\n# It should probably be:\n# from fastapi.exceptions import (\n# EndpointContext,\n# FastAPIError,\n# FastAPIDeprecationWarning,\n# RequestValidationError,\n# ResponseValidationError,\n# WebSocketRequestValidationError,\n# )\n\n# Let's replace the whole block.\nold = \"\"\"from fastapi.exceptions import (, FastAPIDeprecationWarning\n EndpointContext,\n FastAPIError,\n RequestValidationError,\n ResponseValidationError,\n WebSocketRequestValidationError,\n)\"\"\"\nnew = \"\"\"from fastapi.exceptions import (\n EndpointContext,\n FastAPIError,\n FastAPIDeprecationWarning,\n RequestValidationError,\n ResponseValidationError,\n WebSocketRequestValidationError,\n)\"\"\"\nif old in s:\n t = s.replace(old, new)\n p.write_text(t)\nelse:\n # Try to be more flexible\n print(\"Old text not found exactly, trying regex\")\n import re\n # Match from 'from fastapi.exceptions import' until the closing ')'\n pattern = r\"from fastapi\\.exceptions import \\([^\\)]*\\)\"\n # This might be tricky if there are other parenthesis.\n # Let's use the sed output to guide.\n # Actually, let's just use replace with the exact text from sed.\nPY\n"
} | {"status": "ok", "stdout": "", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "", "stderr": "", "exit_code": 0} |
| 19 | run_command | {
"command": "sed -n '48,54p' fastapi/routing.py"
} | {"status": "ok", "stdout": "from fastapi.exceptions import (\n EndpointContext,\n FastAPIError,\n FastAPIDeprecationWarning,\n RequestValidationError,\n Responsfull{"status": "ok", "stdout": "from fastapi.exceptions import (\n EndpointContext,\n FastAPIError,\n FastAPIDeprecationWarning,\n RequestValidationError,\n ResponseValidationError,\n WebSocketRequestValidationError,\n", "stderr": "", "exit_code": 0} |
| 20 | run_command | {
"command": "sed -n '54,56p' fastapi/routing.py"
} | {"status": "ok", "stdout": " WebSocketRequestValidationError,\n)\nfrom fastapi.types import DecoratedCallable, IncEx\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": " WebSocketRequestValidationError,\n)\nfrom fastapi.types import DecoratedCallable, IncEx\n", "stderr": "", "exit_code": 0} |
| 21 | run_command | {
"command": "grep -rn \"FastAPIDeprecationWarning\" fastapi | head -20"
} | {"status": "ok", "stdout": "fastapi/params.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/params.py:79: category=FastAPIDeprecationWarnifull{"status": "ok", "stdout": "fastapi/params.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/params.py:79: category=FastAPIDeprecationWarning,\nfastapi/params.py:109: category=FastAPIDeprecationWarning,\nfastapi/params.py:534: category=FastAPIDeprecationWarning,\nfastapi/params.py:564: category=FastAPIDeprecationWarning,\nfastapi/dependencies/utils.py:54:from fastapi.exceptions import DependencyScopeError, FastAPIDeprecationWarning\nfastapi/dependencies/utils.py:330: category=FastAPIDeprecationWarning,\nfastapi/openapi/utils.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/openapi/utils.py:221: FastAPIDeprecationWarning,\nfastapi/utils.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/utils.py:201: FastAPIDeprecationWarning,\nfastapi/routing.py:51: FastAPIDeprecationWarning,\nfastapi/routing.py:644: category=FastAPIDeprecationWarning,\nfastapi/routing.py:684: category=FastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:1:from fastapi.exceptions import FastAPIDeprecationWarning\nfastapi/temp_pydantic_v1_params.py:67: category=FastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:97: category=FastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:507: category=FastAPIDeprecationWarning,\nfastapi/temp_pydantic_v1_params.py:537: category=FastAPIDeprecationWarning,\nfastapi/exceptions.py:151:class FastAPIDeprecationWarning(DeprecationWarning):\n", "stderr": "", "exit_code": 0} |
| 22 | run_command | {
"command": "python3 -m py_compile fastapi/exceptions.py fastapi/params.py fastapi/dependencies/utils.py fastapi/openapi/utils.py fastapi/utils.py fastapi/routing.py fastapi/temp_pydantic_v1_params.py"
} | {"status": "ok", "stdout": "", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "", "stderr": "", "exit_code": 0} |
| 23 | run_command | {
"command": "git diff"
} | {"status": "ok", "stdout": "diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py\nindex 39d0bd89..af2bed9a 100644\n--- a/fastapi/dependencfull{"status": "ok", "stdout": "diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py\nindex 39d0bd89..af2bed9a 100644\n--- a/fastapi/dependencies/utils.py\n+++ b/fastapi/dependencies/utils.py\n@@ -51,7 +51,7 @@ from fastapi.concurrency import (\n contextmanager_in_threadpool,\n )\n from fastapi.dependencies.models import Dependant\n-from fastapi.exceptions import DependencyScopeError\n+from fastapi.exceptions import DependencyScopeError, FastAPIDeprecationWarning\n from fastapi.logger import logger\n from fastapi.security.oauth2 import SecurityScopes\n from fastapi.types import DependencyCacheKey\n@@ -327,7 +327,7 @@ def get_dependant(\n warnings.warn(\n \"pydantic.v1 is deprecated and will soon stop being supported by FastAPI.\"\n f\" Please update the param {param_name}: {param_details.type_annotation!r}.\",\n- category=DeprecationWarning,\n+ category=FastAPIDeprecationWarning,\n stacklevel=5,\n )\n if isinstance(\ndiff --git a/fastapi/exceptions.py b/fastapi/exceptions.py\nindex 8e0c5590..776268c4 100644\n--- a/fastapi/exceptions.py\n+++ b/fastapi/exceptions.py\n@@ -148,6 +148,12 @@ RequestErrorModel: type[BaseModel] = create_model(\"Request\")\n WebSocketErrorModel: type[BaseModel] = create_model(\"WebSocket\")\n \n \n+class FastAPIDeprecationWarning(DeprecationWarning):\n+ \"\"\"\n+ A deprecation warning specifically for FastAPI.\n+ \"\"\"\n+\n+\n class FastAPIError(RuntimeError):\n \"\"\"\n A generic, FastAPI-specific error.\ndiff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py\nindex a99d4188..6ed07141 100644\n--- a/fastapi/openapi/utils.py\n+++ b/fastapi/openapi/utils.py\n@@ -1,3 +1,4 @@\n+from fastapi.exceptions import FastAPIDeprecationWarning\n import http.client\n import inspect\n import warnings\n@@ -217,7 +218,7 @@ def generate_operation_id(\n warnings.warn(\n \"fastapi.openapi.util |
| 24 | run_command | {
"command": "python3 - <<'PY'\nfrom fastapi.exceptions import FastAPIDeprecationWarning\nimport warnings\n\n# Test that FastAPIDeprecationWarning is a subclass of DeprecationWarning\nassert issubclass(FastAPIDeprecationWarning, DeprecationWarning)\nprint(\"Check passed!\")\nPY\n"
} | {"status": "ok", "stdout": "Check passed!\n", "stderr": "", "exit_code": 0}full{"status": "ok", "stdout": "Check passed!\n", "stderr": "", "exit_code": 0} |
| 25 | run_command | {
"command": "submit_patch"
} | {"status": "error", "error_type": "CommandError", "error_message": "/bin/bash: submit_patch: command not found\n", "details": {"stdout": "", "stderr": "/bin/basfull{"status": "error", "error_type": "CommandError", "error_message": "/bin/bash: submit_patch: command not found\n", "details": {"stdout": "", "stderr": "/bin/bash: submit_patch: command not found\n", "exit_code": 127}} |
| 26 | submit_patch | {} | {"status": "ok", "patch_size": 7873, "files_changed": 7}full{"status": "ok", "patch_size": 7873, "files_changed": 7} |
diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py
index 39d0bd89..af2bed9a 100644
--- a/fastapi/dependencies/utils.py
+++ b/fastapi/dependencies/utils.py
@@ -51,7 +51,7 @@ from fastapi.concurrency import (
contextmanager_in_threadpool,
)
from fastapi.dependencies.models import Dependant
-from fastapi.exceptions import DependencyScopeError
+from fastapi.exceptions import DependencyScopeError, FastAPIDeprecationWarning
from fastapi.logger import logger
from fastapi.security.oauth2 import SecurityScopes
from fastapi.types import DependencyCacheKey
@@ -327,7 +327,7 @@ def get_dependant(
warnings.warn(
"pydantic.v1 is deprecated and will soon stop being supported by FastAPI."
f" Please update the param {param_name}: {param_details.type_annotation!r}.",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=5,
)
if isinstance(
diff --git a/fastapi/exceptions.py b/fastapi/exceptions.py
index 8e0c5590..776268c4 100644
--- a/fastapi/exceptions.py
+++ b/fastapi/exceptions.py
@@ -148,6 +148,12 @@ RequestErrorModel: type[BaseModel] = create_model("Request")
WebSocketErrorModel: type[BaseModel] = create_model("WebSocket")
+class FastAPIDeprecationWarning(DeprecationWarning):
+ """
+ A deprecation warning specifically for FastAPI.
+ """
+
+
class FastAPIError(RuntimeError):
"""
A generic, FastAPI-specific error.
diff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py
index a99d4188..6ed07141 100644
--- a/fastapi/openapi/utils.py
+++ b/fastapi/openapi/utils.py
@@ -1,3 +1,4 @@
+from fastapi.exceptions import FastAPIDeprecationWarning
import http.client
import inspect
import warnings
@@ -217,7 +218,7 @@ def generate_operation_id(
warnings.warn(
"fastapi.openapi.utils.generate_operation_id() was deprecated, "
"it is not used internally, and will be removed soon",
- DeprecationWarning,
+ FastAPIDeprecationWarning,
stacklevel=2,
)
if route.operation_id:
diff --git a/fastapi/params.py b/fastapi/params.py
index c776c4a5..6fbcdee6 100644
--- a/fastapi/params.py
+++ b/fastapi/params.py
@@ -1,3 +1,4 @@
+from fastapi.exceptions import FastAPIDeprecationWarning
import warnings
from collections.abc import Sequence
from dataclasses import dataclass
@@ -75,7 +76,7 @@ class Param(FieldInfo): # type: ignore[misc]
if example is not _Unset:
warnings.warn(
"`example` has been deprecated, please use `examples` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
self.example = example
@@ -105,7 +106,7 @@ class Param(FieldInfo): # type: ignore[misc]
if regex is not None:
warnings.warn(
"`regex` has been deprecated, please use `pattern` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
current_json_schema_extra = json_schema_extra or extra
@@ -530,7 +531,7 @@ class Body(FieldInfo): # type: ignore[misc]
if example is not _Unset:
warnings.warn(
"`example` has been deprecated, please use `examples` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
self.example = example
@@ -560,7 +561,7 @@ class Body(FieldInfo): # type: ignore[misc]
if regex is not None:
warnings.warn(
"`regex` has been deprecated, please use `pattern` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
current_json_schema_extra = json_schema_extra or extra
diff --git a/fastapi/routing.py b/fastapi/routing.py
index 2770e325..44207200 100644
--- a/fastapi/routing.py
+++ b/fastapi/routing.py
@@ -48,6 +48,7 @@ from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import (
EndpointContext,
FastAPIError,
+ FastAPIDeprecationWarning,
RequestValidationError,
ResponseValidationError,
WebSocketRequestValidationError,
@@ -640,7 +641,7 @@ class APIRoute(routing.Route):
warnings.warn(
"pydantic.v1 is deprecated and will soon stop being supported by FastAPI."
f" Please update the response model {self.response_model!r}.",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
self.response_field = create_model_field(
@@ -680,7 +681,7 @@ class APIRoute(routing.Route):
warnings.warn(
"pydantic.v1 is deprecated and will soon stop being supported by FastAPI."
f" In responses={{}}, please update {model}.",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
response_field = create_model_field(
diff --git a/fastapi/temp_pydantic_v1_params.py b/fastapi/temp_pydantic_v1_params.py
index 1bda0ea9..38f870f2 100644
--- a/fastapi/temp_pydantic_v1_params.py
+++ b/fastapi/temp_pydantic_v1_params.py
@@ -1,3 +1,4 @@
+from fastapi.exceptions import FastAPIDeprecationWarning
import warnings
from typing import Annotated, Any, Callable, Optional, Union
@@ -63,7 +64,7 @@ class Param(FieldInfo):
if example is not _Unset:
warnings.warn(
"`example` has been deprecated, please use `examples` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
self.example = example
@@ -93,7 +94,7 @@ class Param(FieldInfo):
if regex is not None:
warnings.warn(
"`regex` has been deprecated, please use `pattern` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
current_json_schema_extra = json_schema_extra or extra
@@ -503,7 +504,7 @@ class Body(FieldInfo):
if example is not _Unset:
warnings.warn(
"`example` has been deprecated, please use `examples` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
self.example = example
@@ -533,7 +534,7 @@ class Body(FieldInfo):
if regex is not None:
warnings.warn(
"`regex` has been deprecated, please use `pattern` instead",
- category=DeprecationWarning,
+ category=FastAPIDeprecationWarning,
stacklevel=4,
)
current_json_schema_extra = json_schema_extra or extra
diff --git a/fastapi/utils.py b/fastapi/utils.py
index c4631d7e..28a5f47e 100644
--- a/fastapi/utils.py
+++ b/fastapi/utils.py
@@ -1,3 +1,4 @@
+from fastapi.exceptions import FastAPIDeprecationWarning
import re
import warnings
from collections.abc import MutableMapping
@@ -197,7 +198,7 @@ def generate_operation_id_for_path(
warnings.warn(
"fastapi.utils.generate_operation_id_for_path() was deprecated, "
"it is not used internally, and will be removed soon",
- DeprecationWarning,
+ FastAPIDeprecationWarning,
stacklevel=2,
)
operation_id = f"{name}{path}"
........................................................................ [ 72%]
........................... [100%]
=============================== warnings summary ===============================
../../../../../../../Users/jp/repos/kaggle-gemini-coding-agent-post-training/.envs/overlays/starlette-0.50.0-py3-none-any/starlette/testclient.py:45
/Users/jp/repos/kaggle-gemini-coding-agent-post-training/.envs/overlays/starlette-0.50.0-py3-none-any/starlette/testclient.py:45: DeprecationWarning: The anyio.abc.BlockingPortal alias is deprecated, use anyio.from_thread.BlockingPortal instead.
_PortalFactoryType = Callable[[], AbstractContextManager[anyio.abc.BlockingPortal]]
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
99 passed, 1 skipped, 1 warning in 1.01s