Modern-DI integration for LiteStar
Project description
"Modern-DI-LiteStar"
Integration of Modern-DI with Litestar.
Usage example: litestar-sqlalchemy-template
📚 Documentation
Installation
pip install modern-di-litestar
Quick start
1. Define providers
import dataclasses
from modern_di import Group, Scope, providers
@dataclasses.dataclass(kw_only=True)
class Database:
url: str
@dataclasses.dataclass(kw_only=True)
class UserRepository:
db: Database
class AppDependencies(Group):
database = providers.Factory(creator=Database, kwargs={"url": "sqlite:///app.db"})
user_repo = providers.Factory(scope=Scope.REQUEST, creator=UserRepository, bound_type=None)
2. Wire the plugin
import litestar
from modern_di import Container
from modern_di_litestar import ModernDIPlugin
groups = [AppDependencies]
app = litestar.Litestar(
plugins=[ModernDIPlugin(Container(groups=groups), autowired_groups=groups)],
)
Passing autowired_groups to ModernDIPlugin auto-registers each provider as a Litestar dependency keyed by its attribute name (database, user_repo), so routes can declare them directly as parameters.
3. Inject into routes
Using FromDI (explicit, per-route)
from modern_di_litestar import FromDI
@litestar.get(
"/users",
dependencies={"repo": FromDI(AppDependencies.user_repo)},
)
async def list_users(repo: UserRepository) -> list[str]:
...
FromDI accepts either a provider instance (AppDependencies.user_repo) or a type (UserRepository).
Using auto-wired group names (implicit)
When autowired_groups is passed to ModernDIPlugin, provider names become available as route parameters directly:
@litestar.get("/users")
async def list_users(user_repo: UserRepository) -> list[str]:
...
4. Access the raw request or websocket via DI
from modern_di_litestar import litestar_request_provider, litestar_websocket_provider
class AppDependencies(Group):
...
request_method = providers.Factory(
scope=Scope.REQUEST,
creator=lambda request: request.method,
bound_type=None,
)
litestar_request_provider and litestar_websocket_provider are pre-built ContextProvider instances that make the current Request / WebSocket objects resolvable within DI.
5. Sub-request (action) scopes
For work that should live shorter than a request, build a child container inside a route:
@litestar.get("/")
async def handler(di_container: Container) -> None:
action_container = di_container.build_child_container()
result = action_container.resolve_provider(AppDependencies.some_action_scoped_factory)
6. Retrieve the app-level container
from modern_di_litestar import fetch_di_container
container = fetch_di_container(app)
Public API
| Symbol | Description |
|---|---|
ModernDIPlugin(container, autowired_groups=None) |
Litestar InitPlugin — wires the DI container into app lifecycle |
FromDI(provider) |
Returns a Litestar Provide that resolves a provider per request |
litestar_request_provider |
ContextProvider for the current litestar.Request |
litestar_websocket_provider |
ContextProvider for the current litestar.WebSocket |
fetch_di_container(app) |
Retrieves the root container from app.state |
build_di_container |
Internal Litestar dependency — creates a scoped child container per request |
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.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file modern_di_litestar-2.8.0.tar.gz.
File metadata
- Download URL: modern_di_litestar-2.8.0.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c84c92671dc0597bc61bb46f167beea20fe863b9f73675d9bcae49f81d988ee4
|
|
| MD5 |
14398b16e9278278c5706d6cadfa1dd3
|
|
| BLAKE2b-256 |
911bef2bd4acae4385cd859cc5503ee7eaabbec69e7ef92df2b9c19478a5f8a3
|
File details
Details for the file modern_di_litestar-2.8.0-py3-none-any.whl.
File metadata
- Download URL: modern_di_litestar-2.8.0-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
057eb986d3646684a58dd2ae29f68b2cae18844598721b4eda13b48f2e5f9e08
|
|
| MD5 |
e21b4e6ca4e898cb02850e0132e85107
|
|
| BLAKE2b-256 |
d11f3af2a9a7e38fe30863b1a4606292ff913d140d64ef0e43d87fa3bb5bbceb
|