modern-di integration for taskiq.
Full guide: taskiq integration docs
Usage example: examples/
Installation
uv add modern-di-taskiq # or: pip install modern-di-taskiq
Usage
setup_di stores the container on broker.state and registers WORKER_STARTUP/WORKER_SHUTDOWN handlers that open/close it. FromDI resolves a provider (or type) into a task parameter through a taskiq dependency, which builds a Scope.REQUEST child container for the task and closes it when the task finishes. No per-task decorator is needed.
import typing
from modern_di import Container, Group, Scope, providers
from modern_di_taskiq import FromDI, setup_di
from taskiq import InMemoryBroker
class Settings:
def __init__(self) -> None:
self.greeting = "hello"
class Greeter:
def __init__(self, settings: Settings) -> None: # auto-injected by type
self._settings = settings
def greet(self, name: str) -> str:
return f"{self._settings.greeting}, {name}"
class AppGroup(Group):
settings = providers.Factory(Settings, scope=Scope.APP, cache=True)
greeter = providers.Factory(Greeter, scope=Scope.REQUEST)
broker = InMemoryBroker()
container = Container(groups=[AppGroup])
setup_di(broker, container)
container.validate() # optional fail-fast; must come after setup_di registers its providers
@broker.task
async def greet(
name: str,
greeter: typing.Annotated[Greeter, FromDI(Greeter)], # resolve by type
) -> str:
return greeter.greet(name)
The WORKER_STARTUP/WORKER_SHUTDOWN events fire when the broker's worker process starts and stops, so a script that calls tasks directly (like InMemoryBroker in a test) must drive the container lifecycle itself, for example with async with broker: .... Providers resolve synchronously, but the per-task Scope.REQUEST child is closed with close_async(), so REQUEST-scoped providers can have async finalizers. taskiq.TaskiqMessage is resolvable within DI via the pre-built taskiq_message_provider context provider.
API
| Symbol | Description |
|---|---|
setup_di(broker, container) |
Stores the root container on broker.state, opens/closes it on worker startup/shutdown, and registers taskiq_message_provider. Returns the container |
FromDI(dependency, *, use_cache=True) |
taskiq dependency that resolves a provider instance or a type from the task's Scope.REQUEST child container, building that child on first use; use it as Annotated[T, FromDI(...)] in task signatures. use_cache is passed to TaskiqDepends. Raises RuntimeError naming setup_di when a task reaches it without setup_di called |
fetch_di_container(broker) |
Returns the root container attached to the taskiq broker |
taskiq_message_provider |
ContextProvider for the current taskiq.TaskiqMessage (REQUEST scope) |
📦 PyPI
📝 License
Part of modern-python
Built on modern-di, a dependency-injection framework with an IoC container and scopes.
Browse the full list of templates and libraries in
modern-python; the org profile has the categorized index.
Metadata
Release files for modern-di-taskiq 4.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| modern_di_taskiq-4.0.0.tar.gz | 4.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| modern_di_taskiq-4.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.5 kB
Release files / modern_di_taskiq-4.0.0.tar.gz
| Download URL | modern_di_taskiq-4.0.0.tar.gz |
|---|---|
| Size | 4.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
027b4de3c5f8c52f48297143a5400d3b4f9dad912887a33ebe05096d0eeb7dce
|
|
BLAKE2b-256 checksum How to use checksums |
d0425d520af71354673e0a3f5e757518f1ec9be190501df1f00acfd3b2f6b6fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","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}
|
Release files / modern_di_taskiq-4.0.0-py3-none-any.whl
| Download URL | modern_di_taskiq-4.0.0-py3-none-any.whl |
|---|---|
| Size | 5.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bb19b388b042d04f7a2971c70cd0296ecc370b8687f2a189143e4f914859e796
|
|
BLAKE2b-256 checksum How to use checksums |
ac0842184bf31ca4b9c26ca6b52811c03e1f4e5c7f59896499def7128b3f081a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","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}
|