Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
FastDepends - extracted and cleared from HTTP domain logic FastAPI Dependency Injection System. Async and sync are both supported.
Documentation: https://lancetnik.github.io/FastDepends/
FastDepends - FastAPI Dependency Injection system extracted from FastAPI and cleared of all HTTP logic. This is a small library which provides you with the ability to use lovely FastAPI interfaces in your own projects or tools.
Thanks to fastapi and pydantic projects for this great functionality. This package is just a small change of the original FastAPI sources to provide DI functionality in a pure-Python way.
Async and sync modes are both supported.
This project should be extremely helpful to boost your not-FastAPI applications (even Flask, I know that u like some legacy).
Also the project can be a core of your own framework for anything. Actually, it was build for my another project - :rocket:Propan:rocket: (and FastStream), check it to see full-featured FastDepends usage example.
pip install fast-depends
There is no way to make Dependency Injection easier
You can use this library without any frameworks in both sync and async code.
import asyncio
from fast_depends import inject, Depends
async def dependency(a: int) -> int:
return a
@inject
async def main(
a: int,
b: int,
c: int = Depends(dependency)
) -> float:
return a + b + c
assert asyncio.run(main("1", 2)) == 4.0
from fast_depends import inject, Depends
def dependency(a: int) -> int:
return a
@inject
def main(
a: int,
b: int,
c: int = Depends(dependency)
) -> float:
return a + b + c
assert main("1", 2) == 4.0
@inject
decorator plays multiple roles at the same time:
Synchronous code is fully supported in this package: without any async_to_sync
, run_sync
, syncify
or any other tricks.
Also, FastDepends casts functions' return values the same way, it can be very helpful in building your own tools.
These are two main defferences from native FastAPI DI System.
Also, FastDepends can be used as a lightweight DI container. Using it, you can easily override basic dependencies with application startup or in tests.
from typing import Annotated
from fast_depends import Depends, dependency_provider, inject
def abc_func() -> int:
raise NotImplementedError()
def real_func() -> int:
return 1
@inject
def func(
dependency: Annotated[int, Depends(abc_func)]
) -> int:
return dependency
with dependency_provider.scope(abc_func, real_func):
assert func() == 1
dependency_provider
in this case is just a default container already declared in the library. But you can use your own the same way:
from typing import Annotated
from fast_depends import Depends, Provider, inject
provider = Provider()
def abc_func() -> int:
raise NotImplementedError()
def real_func() -> int:
return 1
@inject(dependency_overrides_provider=provider)
def func(
dependency: Annotated[int, Depends(abc_func)]
) -> int:
return dependency
with provider.scope(abc_func, real_func):
assert func() == 1
This way you can inherit the basic Provider
class and define any extra logic you want!
If you wish to write your own FastAPI or another closely by architecture tool, you should define your own custom fields to specify application behavior.
Custom fields can be used to adding something specific to a function arguments (like a BackgroundTask) or parsing incoming objects special way. You able decide by own, why and how you will use these tools.
FastDepends grants you this opportunity a very intuitive and comfortable way.
from fast_depends import inject
from fast_depends.library import CustomField
class Header(CustomField):
def use(self, /, **kwargs: AnyDict) -> AnyDict:
kwargs = super().use(**kwargs)
kwargs[self.param_name] = kwargs["headers"][self.param_name]
return kwargs
@inject
def my_func(header_field: int = Header()):
return header_field
assert my_func(
headers={ "header_field": "1" }
) == 1
FAQs
FastDepends - extracted and cleared from HTTP domain logic FastAPI Dependency Injection System. Async and sync are both supported.
We found that fast-depends demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.