Skip to main content

modern-di-litestar

PyPI version Supported Python versions Downloads Coverage CI License GitHub stars uv Ruff ty

Modern-DI integration for Litestar.

Full guide: Litestar integration docs

Usage example: litestar-sqlalchemy-template

Installation

uv add modern-di-litestar      # or: pip install modern-di-litestar

Usage

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]

container = Container(groups=groups)
app = litestar.Litestar(
    plugins=[ModernDIPlugin(container, autowired_groups=groups)],
)
container.validate()  # optional fail-fast; the plugin has registered its providers by now

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)

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 Litestar dependency (registered as di_container) — yields a scoped child container per request

📦 PyPI

📝 License

Part of modern-python

Built on modern-di, a dependency-injection framework with IoC container and scopes.

Browse the full list of templates and libraries in modern-python — see the org profile for the categorized index.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

modern_di_litestar-3.0.1.tar.gz (5.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

modern_di_litestar-3.0.1-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file modern_di_litestar-3.0.1.tar.gz.

File metadata

  • Download URL: modern_di_litestar-3.0.1.tar.gz
  • Upload date:
  • Size: 5.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.33 {"installer":{"name":"uv","version":"0.11.33","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

Hashes for modern_di_litestar-3.0.1.tar.gz
Algorithm Hash digest
SHA256 37065bc01d60e7ebfc634938de71d6b00b4117b71de2a52c99b86f62add9a1ef
MD5 d849f5b20e6aeb834fc5fb6fa3c322fa
BLAKE2b-256 0c57fcc80895d745d5ad3dcdb0183aff8952171baf68f838a1e24a29511206e4

See more details on using hashes here.

File details

Details for the file modern_di_litestar-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: modern_di_litestar-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 5.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.33 {"installer":{"name":"uv","version":"0.11.33","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

Hashes for modern_di_litestar-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b119b07ee0aa93fe45fe498a7c1312e5404033d0082ad0ada80f9f51dd7afde7
MD5 203009648f7aab0e0c5bd447830cd4ac
BLAKE2b-256 522e8db5a59c930ae7b8ec7749a1598bd640d7636f5280385bdd7e1678ff63fb

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

3.0.1 This release

2 files

3.0.0

2 files

2.13.0

2 files

2.12.0

2 files

2.11.1

2 files

2.11.0

2 files

2.10.0

2 files

2.9.2

2 files

2.9.1

2 files

2.9.0

2 files

2.8.0

2 files

2.7.1

2 files

2.7.0

2 files

2.6.4

2 files

2.6.3

2 files

2.6.2

2 files

2.6.1

2 files

2.6.0

2 files

2.5.0

2 files

2.4.0

2 files

2.3.0

2 files

2.2.0

2 files

2.1.1

2 files

2.1.0

2 files

2.0.0

2 files

1.1.0

2 files

1.0.1

2 files

1.0.0

2 files

0.8.0

2 files

0.7.1

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.2

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page