- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/charliermarsh/ruff-pre-commit
- rev: v0.1.2
+ rev: v0.2.0
hooks:
- id: ruff
args:
@app.get("/items/")
async def read_query(
- query_or_default: Annotated[str, Depends(query_or_cookie_extractor)]
+ query_or_default: Annotated[str, Depends(query_or_cookie_extractor)],
):
return {"q_or_cookie": query_or_default}
@app.get("/items/")
async def read_query(
- query_or_default: Annotated[str, Depends(query_or_cookie_extractor)]
+ query_or_default: Annotated[str, Depends(query_or_cookie_extractor)],
):
return {"q_or_cookie": query_or_default}
@app.get("/items/")
async def read_query(
- query_or_default: Annotated[str, Depends(query_or_cookie_extractor)]
+ query_or_default: Annotated[str, Depends(query_or_cookie_extractor)],
):
return {"q_or_cookie": query_or_default}
@app.get("/items/")
async def read_items(
- strange_header: Union[str, None] = Header(default=None, convert_underscores=False)
+ strange_header: Union[str, None] = Header(default=None, convert_underscores=False),
):
return {"strange_header": strange_header}
@app.get("/items/")
async def read_items(
- strange_header: Annotated[str | None, Header(convert_underscores=False)] = None
+ strange_header: Annotated[str | None, Header(convert_underscores=False)] = None,
):
return {"strange_header": strange_header}
@app.get("/items/")
async def read_items(
- strange_header: str | None = Header(default=None, convert_underscores=False)
+ strange_header: str | None = Header(default=None, convert_underscores=False),
):
return {"strange_header": strange_header}
@app.get("/items/")
async def read_items(
- q: Union[str, None] = Query(default=None, min_length=3, max_length=50)
+ q: Union[str, None] = Query(default=None, min_length=3, max_length=50),
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Annotated[Union[str, None], Query(min_length=3, max_length=50)] = None
+ q: Annotated[Union[str, None], Query(min_length=3, max_length=50)] = None,
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Annotated[str | None, Query(min_length=3, max_length=50)] = None
+ q: Annotated[str | None, Query(min_length=3, max_length=50)] = None,
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Annotated[Union[str, None], Query(min_length=3, max_length=50)] = None
+ q: Annotated[Union[str, None], Query(min_length=3, max_length=50)] = None,
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Union[str, None] = Query(default=None, title="Query string", min_length=3)
+ q: Union[str, None] = Query(default=None, title="Query string", min_length=3),
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Annotated[Union[str, None], Query(title="Query string", min_length=3)] = None
+ q: Annotated[Union[str, None], Query(title="Query string", min_length=3)] = None,
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Annotated[str | None, Query(title="Query string", min_length=3)] = None
+ q: Annotated[str | None, Query(title="Query string", min_length=3)] = None,
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: Annotated[Union[str, None], Query(title="Query string", min_length=3)] = None
+ q: Annotated[Union[str, None], Query(title="Query string", min_length=3)] = None,
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- q: str | None = Query(default=None, title="Query string", min_length=3)
+ q: str | None = Query(default=None, title="Query string", min_length=3),
):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
@app.get("/items/")
async def read_items(
- hidden_query: Union[str, None] = Query(default=None, include_in_schema=False)
+ hidden_query: Union[str, None] = Query(default=None, include_in_schema=False),
):
if hidden_query:
return {"hidden_query": hidden_query}
@app.get("/items/")
async def read_items(
- hidden_query: Annotated[Union[str, None], Query(include_in_schema=False)] = None
+ hidden_query: Annotated[Union[str, None], Query(include_in_schema=False)] = None,
):
if hidden_query:
return {"hidden_query": hidden_query}
@app.get("/items/")
async def read_items(
- hidden_query: Annotated[str | None, Query(include_in_schema=False)] = None
+ hidden_query: Annotated[str | None, Query(include_in_schema=False)] = None,
):
if hidden_query:
return {"hidden_query": hidden_query}
@app.get("/items/")
async def read_items(
- hidden_query: Annotated[Union[str, None], Query(include_in_schema=False)] = None
+ hidden_query: Annotated[Union[str, None], Query(include_in_schema=False)] = None,
):
if hidden_query:
return {"hidden_query": hidden_query}
@app.get("/items/")
async def read_items(
- hidden_query: str | None = Query(default=None, include_in_schema=False)
+ hidden_query: str | None = Query(default=None, include_in_schema=False),
):
if hidden_query:
return {"hidden_query": hidden_query}
async def get_current_active_user(
- current_user: Annotated[User, Depends(get_current_user)]
+ current_user: Annotated[User, Depends(get_current_user)],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.get("/users/me")
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
async def get_current_active_user(
- current_user: Annotated[User, Depends(get_current_user)]
+ current_user: Annotated[User, Depends(get_current_user)],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.get("/users/me")
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
async def get_current_active_user(
- current_user: Annotated[User, Depends(get_current_user)]
+ current_user: Annotated[User, Depends(get_current_user)],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.get("/users/me")
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.post("/token")
async def login_for_access_token(
- form_data: OAuth2PasswordRequestForm = Depends()
+ form_data: OAuth2PasswordRequestForm = Depends(),
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
async def get_current_active_user(
- current_user: Annotated[User, Depends(get_current_user)]
+ current_user: Annotated[User, Depends(get_current_user)],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/", response_model=User)
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.get("/users/me/items/")
async def read_own_items(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: Annotated[User, Depends(get_current_user)]
+ current_user: Annotated[User, Depends(get_current_user)],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/", response_model=User)
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.get("/users/me/items/")
async def read_own_items(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: Annotated[User, Depends(get_current_user)]
+ current_user: Annotated[User, Depends(get_current_user)],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/", response_model=User)
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.get("/users/me/items/")
async def read_own_items(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return [{"item_id": "Foo", "owner": current_user.username}]
@app.post("/token")
async def login_for_access_token(
- form_data: OAuth2PasswordRequestForm = Depends()
+ form_data: OAuth2PasswordRequestForm = Depends(),
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
async def get_current_active_user(
- current_user: User = Security(get_current_user, scopes=["me"])
+ current_user: User = Security(get_current_user, scopes=["me"]),
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: OAuth2PasswordRequestForm = Depends()
+ form_data: OAuth2PasswordRequestForm = Depends(),
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/items/")
async def read_own_items(
- current_user: User = Security(get_current_active_user, scopes=["items"])
+ current_user: User = Security(get_current_active_user, scopes=["items"]),
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: Annotated[User, Security(get_current_user, scopes=["me"])]
+ current_user: Annotated[User, Security(get_current_user, scopes=["me"])],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/", response_model=User)
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.get("/users/me/items/")
async def read_own_items(
- current_user: Annotated[User, Security(get_current_active_user, scopes=["items"])]
+ current_user: Annotated[User, Security(get_current_active_user, scopes=["items"])],
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: Annotated[User, Security(get_current_user, scopes=["me"])]
+ current_user: Annotated[User, Security(get_current_user, scopes=["me"])],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/", response_model=User)
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.get("/users/me/items/")
async def read_own_items(
- current_user: Annotated[User, Security(get_current_active_user, scopes=["items"])]
+ current_user: Annotated[User, Security(get_current_active_user, scopes=["items"])],
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: Annotated[User, Security(get_current_user, scopes=["me"])]
+ current_user: Annotated[User, Security(get_current_user, scopes=["me"])],
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
+ form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/", response_model=User)
async def read_users_me(
- current_user: Annotated[User, Depends(get_current_active_user)]
+ current_user: Annotated[User, Depends(get_current_active_user)],
):
return current_user
@app.get("/users/me/items/")
async def read_own_items(
- current_user: Annotated[User, Security(get_current_active_user, scopes=["items"])]
+ current_user: Annotated[User, Security(get_current_active_user, scopes=["items"])],
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: User = Security(get_current_user, scopes=["me"])
+ current_user: User = Security(get_current_user, scopes=["me"]),
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: OAuth2PasswordRequestForm = Depends()
+ form_data: OAuth2PasswordRequestForm = Depends(),
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/items/")
async def read_own_items(
- current_user: User = Security(get_current_active_user, scopes=["items"])
+ current_user: User = Security(get_current_active_user, scopes=["items"]),
):
return [{"item_id": "Foo", "owner": current_user.username}]
async def get_current_active_user(
- current_user: User = Security(get_current_user, scopes=["me"])
+ current_user: User = Security(get_current_user, scopes=["me"]),
):
if current_user.disabled:
raise HTTPException(status_code=400, detail="Inactive user")
@app.post("/token")
async def login_for_access_token(
- form_data: OAuth2PasswordRequestForm = Depends()
+ form_data: OAuth2PasswordRequestForm = Depends(),
) -> Token:
user = authenticate_user(fake_users_db, form_data.username, form_data.password)
if not user:
@app.get("/users/me/items/")
async def read_own_items(
- current_user: User = Security(get_current_active_user, scopes=["items"])
+ current_user: User = Security(get_current_active_user, scopes=["items"]),
):
return [{"item_id": "Foo", "owner": current_user.username}]
def get_current_username(
- credentials: Annotated[HTTPBasicCredentials, Depends(security)]
+ credentials: Annotated[HTTPBasicCredentials, Depends(security)],
):
current_username_bytes = credentials.username.encode("utf8")
correct_username_bytes = b"stanleyjobson"
def get_current_username(
- credentials: Annotated[HTTPBasicCredentials, Depends(security)]
+ credentials: Annotated[HTTPBasicCredentials, Depends(security)],
):
current_username_bytes = credentials.username.encode("utf8")
correct_username_bytes = b"stanleyjobson"
results: List[Union[bytes, str]] = []
async def process_fn(
- fn: Callable[[], Coroutine[Any, Any, Any]]
+ fn: Callable[[], Coroutine[Any, Any, Any]],
) -> None:
result = await fn()
results.append(result) # noqa: B023
def generate_encoders_by_class_tuples(
- type_encoder_map: Dict[Any, Callable[[Any], Any]]
+ type_encoder_map: Dict[Any, Callable[[Any], Any]],
) -> Dict[Callable[[Any], Any], Tuple[Any, ...]]:
encoders_by_class_tuples: Dict[Callable[[Any], Any], Tuple[Any, ...]] = defaultdict(
tuple
"docs_src/response_model/tutorial003_04_py310.py",
]
-[tool.ruff]
+[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"W191", # indentation contains tabs
]
-[tool.ruff.per-file-ignores]
+[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401"]
"docs_src/dependencies/tutorial007.py" = ["F821"]
"docs_src/dependencies/tutorial008.py" = ["F821"]
"docs_src/dependencies/tutorial008b_an_py39.py" = ["B904"]
-[tool.ruff.isort]
+[tool.ruff.lint.isort]
known-third-party = ["fastapi", "pydantic", "starlette"]
-[tool.ruff.pyupgrade]
+[tool.ruff.lint.pyupgrade]
# Preserve types, even if a file imports `from __future__ import annotations`.
keep-runtime-typing = true
pytest >=7.1.3,<8.0.0
coverage[toml] >= 6.5.0,< 8.0
mypy ==1.4.1
-ruff ==0.1.2
+ruff ==0.2.0
email_validator >=1.1.1,<3.0.0
dirty-equals ==0.6.0
# TODO: once removing databases from tutorial, upgrade SQLAlchemy
@app.get("/hidden_cookie")
async def hidden_cookie(
- hidden_cookie: Optional[str] = Cookie(default=None, include_in_schema=False)
+ hidden_cookie: Optional[str] = Cookie(default=None, include_in_schema=False),
):
return {"hidden_cookie": hidden_cookie}
@app.get("/hidden_header")
async def hidden_header(
- hidden_header: Optional[str] = Header(default=None, include_in_schema=False)
+ hidden_header: Optional[str] = Header(default=None, include_in_schema=False),
):
return {"hidden_header": hidden_header}
@app.get("/hidden_query")
async def hidden_query(
- hidden_query: Optional[str] = Query(default=None, include_in_schema=False)
+ hidden_query: Optional[str] = Query(default=None, include_in_schema=False),
):
return {"hidden_query": hidden_query}
@app.post("/items/")
async def read_items(
- q: Annotated[str | None, Form(regex="^fixedquery$")] = None
+ q: Annotated[str | None, Form(regex="^fixedquery$")] = None,
):
if q:
return f"Hello {q}"
@app.get("/items/")
async def read_items(
- q: Annotated[str | None, Query(regex="^fixedquery$")] = None
+ q: Annotated[str | None, Query(regex="^fixedquery$")] = None,
):
if q:
return f"Hello {q}"