Skip to main content

Modern-DI integration for LiteStar

Project description

"Modern-DI-LiteStar"

Test Coverage Supported versions downloads GitHub stars

Integration of Modern-DI with Litestar.

Usage example: litestar-sqlalchemy-template

Part of modern-python

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

📚 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


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-2.9.1.tar.gz (4.2 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-2.9.1-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: modern_di_litestar-2.9.1.tar.gz
  • Upload date:
  • Size: 4.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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-2.9.1.tar.gz
Algorithm Hash digest
SHA256 14a596bda0030c615b740ea2ef2c437d8a478b0c017006e2bc44ab7c795772cd
MD5 5e5a7b6d5a1e5241914a144322b40732
BLAKE2b-256 8b60bd7cc3b7bead7c664b0317f1b97311971e3868775a7348e05582f28a18c4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: modern_di_litestar-2.9.1-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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-2.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e281c4806ea233c82647750196c0110f565a20db29ecfab0a56e30b907f9d955
MD5 280b3b039bef4f64dfa6f6b10cc5a6a9
BLAKE2b-256 9a99bdd5cc012cf38dd23c1179aff810f224c7a27826e4e7afcd7b5ce2c24e69

See more details on using hashes here.

Supported by

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