mirror of https://github.com/astral-sh/ruff
88 lines
2.5 KiB
Python
88 lines
2.5 KiB
Python
"""Test FAST002 ellipsis handling."""
|
|
|
|
from fastapi import Body, Cookie, FastAPI, Header, Query
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
# Cases that should be fixed - ellipsis should be removed
|
|
|
|
|
|
@app.get("/test1")
|
|
async def test_ellipsis_query(
|
|
# This should become: param: Annotated[str, Query(description="Test param")]
|
|
param: str = Query(..., description="Test param"),
|
|
) -> str:
|
|
return param
|
|
|
|
|
|
@app.get("/test2")
|
|
async def test_ellipsis_header(
|
|
# This should become: auth: Annotated[str, Header(description="Auth header")]
|
|
auth: str = Header(..., description="Auth header"),
|
|
) -> str:
|
|
return auth
|
|
|
|
|
|
@app.post("/test3")
|
|
async def test_ellipsis_body(
|
|
# This should become: data: Annotated[dict, Body(description="Request body")]
|
|
data: dict = Body(..., description="Request body"),
|
|
) -> dict:
|
|
return data
|
|
|
|
|
|
@app.get("/test4")
|
|
async def test_ellipsis_cookie(
|
|
# This should become: session: Annotated[str, Cookie(description="Session ID")]
|
|
session: str = Cookie(..., description="Session ID"),
|
|
) -> str:
|
|
return session
|
|
|
|
|
|
@app.get("/test5")
|
|
async def test_simple_ellipsis(
|
|
# This should become: id: Annotated[str, Query()]
|
|
id: str = Query(...),
|
|
) -> str:
|
|
return id
|
|
|
|
|
|
@app.get("/test6")
|
|
async def test_multiple_kwargs_with_ellipsis(
|
|
# This should become: param: Annotated[str, Query(description="Test", min_length=1, max_length=10)]
|
|
param: str = Query(..., description="Test", min_length=1, max_length=10),
|
|
) -> str:
|
|
return param
|
|
|
|
|
|
# Cases with actual default values - these should preserve the default
|
|
|
|
|
|
@app.get("/test7")
|
|
async def test_with_default_value(
|
|
# This should become: param: Annotated[str, Query(description="Test")] = "default"
|
|
param: str = Query("default", description="Test"),
|
|
) -> str:
|
|
return param
|
|
|
|
|
|
@app.get("/test8")
|
|
async def test_with_default_none(
|
|
# This should become: param: Annotated[str | None, Query(description="Test")] = None
|
|
param: str | None = Query(None, description="Test"),
|
|
) -> str:
|
|
return param or "empty"
|
|
|
|
|
|
@app.get("/test9")
|
|
async def test_mixed_parameters(
|
|
# First param should be fixed with default preserved
|
|
optional_param: str = Query("default", description="Optional"),
|
|
# Second param should not be fixed because of the preceding default
|
|
required_param: str = Query(..., description="Required"),
|
|
# Third param should be fixed with default preserved
|
|
another_optional_param: int = Query(42, description="Another optional"),
|
|
) -> str:
|
|
return f"{required_param}-{optional_param}-{another_optional_param}"
|