Skip to main content

Modern-DI integration for Typer

Project description

"Modern-DI-Typer"

Test Coverage Supported versions downloads GitHub stars

Integration of Modern-DI to Typer

📚 Documentation

Installation

pip install modern-di-typer

Usage

import typing
import typer
import modern_di
from modern_di import Scope, providers, Group
from modern_di_typer import FromDI, inject, setup_di


class Dependencies(Group):
    settings = providers.Factory(creator=lambda: {"debug": True})
    service = providers.Factory(scope=Scope.REQUEST, creator=MyService, bound_type=None)


app = typer.Typer()
container = modern_di.Container(groups=[Dependencies])
setup_di(app, container)


@app.command()
@inject
def my_command(
    name: typing.Annotated[str, typer.Argument()],
    service: typing.Annotated[MyService, FromDI(Dependencies.service)],
) -> None:
    service.run(name)


if __name__ == "__main__":
    with container:
        app()

Action scope

To resolve Scope.ACTION dependencies, inject modern_di.Container (the REQUEST-scoped container created by @inject) and build a child:

import modern_di
from modern_di import Scope, providers, Group
from modern_di_typer import FromDI, inject


class Dependencies(Group):
    job = providers.Factory(scope=Scope.ACTION, creator=MyJob, bound_type=None)


@app.command()
@inject
def my_command(
    container: typing.Annotated[modern_di.Container, FromDI(modern_di.Container)],
) -> None:
    with container.build_child_container() as action_container:
        job = action_container.resolve_provider(Dependencies.job)
        job.run()

API

  • setup_di(app, container) — register the container with a Typer app
  • inject — decorator that resolves FromDI-annotated parameters before the command runs; also exposes typer.Context with ctx.obj["di_container"] for manual use
  • FromDI(provider) — marker used in Annotated[T, FromDI(...)]; accepts a provider instance or a type
  • fetch_di_container(ctx) — returns the app-scoped container from ctx.obj

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

Uploaded Python 3

File details

Details for the file modern_di_typer-2.0.1.tar.gz.

File metadata

  • Download URL: modern_di_typer-2.0.1.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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_typer-2.0.1.tar.gz
Algorithm Hash digest
SHA256 ece7c806464c92257ff67b9ee93db7e186a88996ef57442990273d7117d7d735
MD5 0835eb2beca93b1e3612d02d1a574b20
BLAKE2b-256 51de4fd8418dc8a1c65873697208ae4bc6a56c5a82cf198c55eb9167d452f674

See more details on using hashes here.

File details

Details for the file modern_di_typer-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: modern_di_typer-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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_typer-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fb8d1bfa8519fb5a52b19a1285695a9392c4578eda23d6cf76ca2d9c7d737fc9
MD5 a3b7af6e231cbfc6588ee48109aa09c5
BLAKE2b-256 158a1d49b8a301d8f23b2450531f3847d99be94dea18e5b67e9ae0c5aaf4df0b

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