Browse Source

fix: store special dependand names in sets instead of lists

pull/12406/head
Peter Volf 2 weeks ago
parent
commit
63367915ed
Failed to extract signature
  1. 14
      fastapi/dependencies/models.py
  2. 12
      fastapi/dependencies/utils.py

14
fastapi/dependencies/models.py

@ -1,5 +1,5 @@
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Any, Callable, List, Optional, Sequence, Tuple from typing import Any, Callable, List, Optional, Sequence, Set, Tuple
from fastapi._compat import ModelField from fastapi._compat import ModelField
from fastapi.security.base import SecurityBase from fastapi.security.base import SecurityBase
@ -22,12 +22,12 @@ class Dependant:
security_requirements: List[SecurityRequirement] = field(default_factory=list) security_requirements: List[SecurityRequirement] = field(default_factory=list)
name: Optional[str] = None name: Optional[str] = None
call: Optional[Callable[..., Any]] = None call: Optional[Callable[..., Any]] = None
request_param_names: List[str] = field(default_factory=list) request_param_names: Set[str] = field(default_factory=set)
websocket_param_names: List[str] = field(default_factory=list) websocket_param_names: Set[str] = field(default_factory=set)
http_connection_param_names: List[str] = field(default_factory=list) http_connection_param_names: Set[str] = field(default_factory=set)
response_param_names: List[str] = field(default_factory=list) response_param_names: Set[str] = field(default_factory=set)
background_tasks_param_names: List[str] = field(default_factory=list) background_tasks_param_names: Set[str] = field(default_factory=set)
security_scopes_param_names: List[str] = field(default_factory=list) security_scopes_param_names: Set[str] = field(default_factory=set)
security_scopes: Optional[List[str]] = None security_scopes: Optional[List[str]] = None
use_cache: bool = True use_cache: bool = True
path: Optional[str] = None path: Optional[str] = None

12
fastapi/dependencies/utils.py

@ -318,22 +318,22 @@ def add_non_field_param_to_dependency(
*, param_name: str, type_annotation: Any, dependant: Dependant *, param_name: str, type_annotation: Any, dependant: Dependant
) -> Optional[bool]: ) -> Optional[bool]:
if lenient_issubclass(type_annotation, Request): if lenient_issubclass(type_annotation, Request):
dependant.request_param_names.append(param_name) dependant.request_param_names.add(param_name)
return True return True
elif lenient_issubclass(type_annotation, WebSocket): elif lenient_issubclass(type_annotation, WebSocket):
dependant.websocket_param_names.append(param_name) dependant.websocket_param_names.add(param_name)
return True return True
elif lenient_issubclass(type_annotation, HTTPConnection): elif lenient_issubclass(type_annotation, HTTPConnection):
dependant.http_connection_param_names.append(param_name) dependant.http_connection_param_names.add(param_name)
return True return True
elif lenient_issubclass(type_annotation, Response): elif lenient_issubclass(type_annotation, Response):
dependant.response_param_names.append(param_name) dependant.response_param_names.add(param_name)
return True return True
elif lenient_issubclass(type_annotation, StarletteBackgroundTasks): elif lenient_issubclass(type_annotation, StarletteBackgroundTasks):
dependant.background_tasks_param_names.append(param_name) dependant.background_tasks_param_names.add(param_name)
return True return True
elif lenient_issubclass(type_annotation, SecurityScopes): elif lenient_issubclass(type_annotation, SecurityScopes):
dependant.security_scopes_param_names.append(param_name) dependant.security_scopes_param_names.add(param_name)
return True return True
return None return None

Loading…
Cancel
Save