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 greate functionality. This package is just a small change of the original Fastapi sources to provide DI functionality in a pyre-Python way.
Async and sync modes are both supported.
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:
- resolve Depends classes
- cast types according to Python annotation
- validate incoming parameters using pydantic
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.
Library was based on 0.95.0 FastAPI version.
If we are too far behind, please, contact me or contubute yourself. Really appreciate your help.