Dependency Injection library
Project description
AnyDI
Modern, lightweight Dependency Injection library using type annotations.
Documentation
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
Release history Release notifications | RSS feed
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)
Built Distribution
anydi-0.26.8-py3-none-any.whl
(28.2 kB
view details)
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 10fb641fa3e7ccb3d5515691181c926de1dff605a4f4d22f9d306d16a59bf730 |
|
MD5 | f704dad820beb60a7e9d3d5b219199a4 |
|
BLAKE2b-256 | 48ada5e62acfb299dc74622992d2abdc462f3d80a45b6ed4503395323d5ed244 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 350163b2f6af03f8ca9ed96adddbe5241dea4f43572b0cfd82383954bd4b1f40 |
|
MD5 | f4e6c25b6119eb8cd607ccbaf1eea96c |
|
BLAKE2b-256 | c7985d5fbb3554157549b05f7c715d0a15909af91be539706ceb62d11624a5e4 |