Browse Source

Refactor `Dependant._security_dependencies` property for improved memory usage

```
Samples: 200000 - current=318.4 MB  peak=318.4 MB
Samples: 100000 - current=159.2 MB  peak=159.2 MB
Samples: 50000 - current=79.6 MB  peak=79.6 MB
Samples: 1000 - current=1.6 MB  peak=1.6 MB
Samples: 500 - current=0.8 MB  peak=0.8 MB
```
pull/15336/head
ipeluffo 2 months ago
parent
commit
6a074fff5b
Failed to extract signature
  1. 10
      fastapi/dependencies/models.py

10
fastapi/dependencies/models.py

@ -55,6 +55,7 @@ class Dependant:
_uses_scopes_cache: bool = field(default=None, init=False, repr=False)
_is_security_scheme_cache: bool = field(default=None, init=False, repr=False)
_security_scheme_cache: SecurityBase = field(default=None, init=False, repr=False)
_security_dependencies_cache: list["Dependant"] = field(default=None, init=False, repr=False)
@property
def oauth_scopes(self) -> list[str]:
@ -123,10 +124,13 @@ class Dependant:
return self._security_scheme_cache
@cached_property
@property
def _security_dependencies(self) -> list["Dependant"]:
security_deps = [dep for dep in self.dependencies if dep._is_security_scheme]
return security_deps
if self._security_dependencies_cache is None:
security_deps = [dep for dep in self.dependencies if dep._is_security_scheme]
self._security_dependencies_cache = security_deps
return self._security_dependencies_cache
@cached_property
def is_gen_callable(self) -> bool:

Loading…
Cancel
Save