No project description provided
Project description
fastapi-better-di
What is this ?
fastapi-better-di
is a utility that allows you to use DI in fastapi without Depends()
Installation
pip install fastapi_better_di
Examples
# app.py
import uvicorn
from fastapi import FastAPI
from fastapi_better_di.patcher.auto import is_pathed
# functions were patched immediately after import
assert is_pathed(), "Something went wrong"
class MyType:
def __init__(self, value):
self.value = value
app = FastAPI()
app.dependency_overrides[MyType] = lambda: MyType(123)
@app.get("/")
def handler(my_type: MyType): # <- DI without `Depends()`
assert my_type.value == 123
return my_type
if __name__ == "__main__":
uvicorn.run(app)
Usage
You have 2 use cases:
- Use patching (preferably):
-
Auto patching: patches classes when importing:
from fastapi_better_di.patcher.auto import is_pathed # The classes were patched immediately after import # To check if everything is OK, use assert assert is_pathed(), "Something went wrong"
-
Manual patching: you need to call
patch()
by yourself:from fastapi_better_di.patcher.manual import patch, is_pathed patch() # To check if everything is OK, use assert assert is_pathed(), "Something went wrong"
-
- Use DI Classes:
FastAPIDI, APIRouterDI, APIRouteDI
- Use
FastAPIDI
instead ofFastAPI
- Use
APIRouterDI
instead ofAPIRouter
- Use
APIRouteDI
instead ofAPIRoute
- DI Classes example
- Use
-
IMPORTANT: You can still use
= Depends()
without a function as an argument, and it won't add unnecessary arguments to the swagger.- Related issue: fastapi issue
-
IMPORTANT: The main app(
FastAPI
) anddependency_overrides
must be initialized before importing routers!
How it works
fastapi-better-di
simply patch the handler function and add = Depends(func)
as the default argument
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.