Browse Source

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

pull/14260/head
Sebastián Ramírez 8 months ago
committed by GitHub
parent
commit
c144f9fbd3
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      fastapi/dependencies/utils.py
  2. 25
      fastapi/params.py
  3. 11
      tests/test_params_repr.py

4
fastapi/dependencies/utils.py

@ -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)):

25
fastapi/params.py

@ -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 []

11
tests/test_params_repr.py

@ -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)"
)

Loading…
Cancel
Save