Skip to main content

Dependency Injection library

Project description

AnyDI

Modern, lightweight Dependency Injection library using type annotations.

CI Coverage Documentation


Documentation

http://anydi.readthedocs.io/


AnyDI is a modern, lightweight Dependency Injection library suitable for any synchronous or asynchronous applications with Python 3.8+, based on type annotations (PEP 484).

The key features are:

  • Type-safe: Resolves dependencies using type annotations.
  • Async Support: Compatible with both synchronous and asynchronous providers and injections.
  • Scoping: Supports singleton, transient, and request scopes.
  • Easy to Use: Designed for simplicity and minimal boilerplate.
  • Named Dependencies: Supports named dependencies using Annotated type.
  • Resource Management: Manages resources using context managers.
  • Modular: Facilitates a modular design with support for multiple modules.
  • Scanning: Automatically scans for injectable functions and classes.
  • Integrations: Provides easy integration with popular frameworks and libraries.
  • Testing: Simplifies testing by allowing provider overrides.

Installation

pip install anydi

Quick Example

app.py

from anydi import auto, Container

container = Container()


@container.provider(scope="singleton")
def message() -> str:
    return "Hello, world!"


@container.inject
def say_hello(message: str = auto) -> None:
    print(message)


if __name__ == "__main__":
    say_hello()

FastAPI Example

app.py

from fastapi import FastAPI

import anydi.ext.fastapi
from anydi import Container
from anydi.ext.fastapi import Inject

container = Container()


@container.provider(scope="singleton")
def message() -> str:
    return "Hello, World!"


app = FastAPI()


@app.get("/hello")
def say_hello(message: str = Inject()) -> dict[str, str]:
    return {"message": message}


# Install the container into the FastAPI app
anydi.ext.fastapi.install(app, container)

Django Ninja Example

container.py

from anydi import Container


def get_container() -> Container:
    container = Container()

    @container.provider(scope="singleton")
    def message() -> str:
        return "Hello, World!"

    return container

settings.py

INSTALLED_APPS = [
    ...
    "anydi.ext.django",
]

ANYDI = {
    "CONTAINER_FACTORY": "myapp.container.get_container",
    "PATCH_NINJA": True,
}

urls.py

from django.http import HttpRequest
from django.urls import path
from ninja import NinjaAPI

from anydi import auto

api = NinjaAPI()


@api.get("/hello")
def say_hello(request: HttpRequest, message: str = auto) -> dict[str, str]:
    return {"message": message}


urlpatterns = [
    path("api/", api.urls),
]

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

anydi-0.26.8.tar.gz (22.4 kB view details)

Uploaded Source

Built Distribution

anydi-0.26.8-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file anydi-0.26.8.tar.gz.

File metadata

  • Download URL: anydi-0.26.8.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.2 Darwin/23.2.0

File hashes

Hashes for anydi-0.26.8.tar.gz
Algorithm Hash digest
SHA256 10fb641fa3e7ccb3d5515691181c926de1dff605a4f4d22f9d306d16a59bf730
MD5 f704dad820beb60a7e9d3d5b219199a4
BLAKE2b-256 48ada5e62acfb299dc74622992d2abdc462f3d80a45b6ed4503395323d5ed244

See more details on using hashes here.

Provenance

File details

Details for the file anydi-0.26.8-py3-none-any.whl.

File metadata

  • Download URL: anydi-0.26.8-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.2 Darwin/23.2.0

File hashes

Hashes for anydi-0.26.8-py3-none-any.whl
Algorithm Hash digest
SHA256 350163b2f6af03f8ca9ed96adddbe5241dea4f43572b0cfd82383954bd4b1f40
MD5 f4e6c25b6119eb8cd607ccbaf1eea96c
BLAKE2b-256 c7985d5fbb3554157549b05f7c715d0a15909af91be539706ceb62d11624a5e4

See more details on using hashes here.

Provenance

Supported by

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