♻️ Refactor internals of dependencies, simplify using dataclasses (#14254)

This commit is contained in:
Sebastián Ramírez 2025-10-30 01:51:50 -03:00 committed by GitHub
parent 22ccca21fc
commit c144f9fbd3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 31 deletions

View File

@ -160,8 +160,8 @@ def get_sub_dependant(
security_requirement = None security_requirement = None
security_scopes = security_scopes or [] security_scopes = security_scopes or []
if isinstance(depends, params.Security): if isinstance(depends, params.Security):
dependency_scopes = depends.scopes if depends.scopes:
security_scopes.extend(dependency_scopes) security_scopes.extend(depends.scopes)
if isinstance(dependency, SecurityBase): if isinstance(dependency, SecurityBase):
use_scopes: List[str] = [] use_scopes: List[str] = []
if isinstance(dependency, (OAuth2, OpenIdConnect)): if isinstance(dependency, (OAuth2, OpenIdConnect)):

View File

@ -1,4 +1,5 @@
import warnings import warnings
from dataclasses import dataclass
from enum import Enum from enum import Enum
from typing import Any, Callable, Dict, List, Optional, Sequence, Union from typing import Any, Callable, Dict, List, Optional, Sequence, Union
@ -761,26 +762,12 @@ class File(Form): # type: ignore[misc]
) )
@dataclass
class Depends: class Depends:
def __init__( dependency: Optional[Callable[..., Any]] = None
self, dependency: Optional[Callable[..., Any]] = None, *, use_cache: bool = True use_cache: bool = True
):
self.dependency = dependency
self.use_cache = use_cache
def __repr__(self) -> str:
attr = getattr(self.dependency, "__name__", type(self.dependency).__name__)
cache = "" if self.use_cache else ", use_cache=False"
return f"{self.__class__.__name__}({attr}{cache})"
@dataclass
class Security(Depends): class Security(Depends):
def __init__( scopes: Optional[Sequence[str]] = None
self,
dependency: Optional[Callable[..., Any]] = None,
*,
scopes: Optional[Sequence[str]] = None,
use_cache: bool = True,
):
super().__init__(dependency=dependency, use_cache=use_cache)
self.scopes = scopes or []

View File

@ -1,7 +1,7 @@
from typing import Any, List from typing import Any, List
from dirty_equals import IsOneOf from dirty_equals import IsOneOf
from fastapi.params import Body, Cookie, Depends, Header, Param, Path, Query from fastapi.params import Body, Cookie, Header, Param, Path, Query
test_data: List[Any] = ["teststr", None, ..., 1, []] test_data: List[Any] = ["teststr", None, ..., 1, []]
@ -141,12 +141,3 @@ def test_body_repr_number():
def test_body_repr_list(): def test_body_repr_list():
assert repr(Body([])) == "Body([])" assert repr(Body([])) == "Body([])"
def test_depends_repr():
assert repr(Depends()) == "Depends(NoneType)"
assert repr(Depends(get_user)) == "Depends(get_user)"
assert repr(Depends(use_cache=False)) == "Depends(NoneType, use_cache=False)"
assert (
repr(Depends(get_user, use_cache=False)) == "Depends(get_user, use_cache=False)"
)