mirror of https://github.com/tiangolo/fastapi.git
♻️ Refactor internals of dependencies, simplify using dataclasses (#14254)
This commit is contained in:
parent
22ccca21fc
commit
c144f9fbd3
|
|
@ -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)):
|
||||||
|
|
|
||||||
|
|
@ -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 []
|
|
||||||
|
|
|
||||||
|
|
@ -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…
Reference in New Issue