Dependency injection library for python
Project description
PyDepends
A lightweight Python dependency injection library designed to simplify managing dependencies in synchronous and asynchronous code using decorators and type-safe wrappers.
Features
- Dependency injection with support for synchronous and asynchronous dependencies.
- Dependency overrides via a provider for easy testing and configuration.
- Context-managed dependency lifecycles with support for generators and async generators.
- Simple API with decorators and wrappers for clean, maintainable code.
Installation
pip install pydepends
Quickstart
Here’s a simple example showing how to define dependencies as a dependency tree:
from pydepends.depends import inject, Depends
def left_leaf_dependency():
return 2
async def right_leaf_dependency():
yield 3 #generators supported
async def right_node_dependency(leaf = Depends(right_leaf_dependency)):
return leaf * 5
async def root_dependency(left: int = Depends(left_leaf_dependency), right: int = Depends(right_node_dependency)) -> int:
return left * right * 7
Inject the dependencies in a sync function:
from pydepends.depends import Provider
provider = Provider()
@inject(provider)
def handle_dependency(root: int = Depends(root_dependency)) -> int:
return root * 11
value = handle_dependency()
assert value == 2 * 3 * 5 * 7 * 11
print(f"Computed value: {value}") # Output: Computed value: 2310
Or inject them in an async function. Sync dependencies are put into an asyncio thread to avoid blocking the event loop.
@inject(provider)
async def async_handle_dependency(root: int = Dependency(root_dependency)):
return root*11
async def main():
value = await async_handle_dependency()
assert value == 2*3*5*7*11
print(f"Computed value: {value}") # Output: Computed value: 2310
import asyncio
asyncio.run(main())
How it works
- Depends wraps a callable into a Dependency object.
- Provider allows overriding dependencies (useful for testing or different environments).
- The @inject decorator resolves and injects dependencies based on the provider.
- Supports both synchronous and asynchronous callables, managing contexts as needed.
License
This project is licensed under the Apache License 2.0 — see the LICENSE file for details. Contributing
Contributions, issues, and feature requests are welcome! Feel free to check issues page or submit a pull 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydepends-0.1.1.tar.gz.
File metadata
- Download URL: pydepends-0.1.1.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.1 Linux/6.11.0-1015-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73374ccb4ea3e9818166fbfb210abc10df83d5469ac1062f4c6602316ca0bf9c
|
|
| MD5 |
069d3e277a9856085d9483e0a6acc80f
|
|
| BLAKE2b-256 |
ecfef2f6706688bf1f481086bf7961711f1805f07bc3ad0b56ae8069ca4c6818
|
File details
Details for the file pydepends-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pydepends-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.1 Linux/6.11.0-1015-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b41698b2226d16ea10726711be990b7ff319fbe2aa0c739b14eee383c38900ad
|
|
| MD5 |
ffc187b74d4f85af4936b04f05697332
|
|
| BLAKE2b-256 |
8acdf624e025df2b54ab7c28d18ae50d8a7b972aaf5bb6eb811214320fd19fab
|