Observed since 20 Oct, 16:19 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
A lightweight dependency injection framework for Python applications
A lightweight, yet powerful dependency injection framework for Python applications.
pip install a13x-depinj
from dataclasses import dataclass
@dataclass
class DatabaseConfig:
url: str
port: int
class Database:
def __init__(self, config: dict):
self.config = DatabaseConfig(**config)
def connect(self):
# Implementation
pass
class UserService:
def __init__(self, config: dict):
self.db = ComponentRegistry().get(Database)
components:
- module: myapp.database
class: Database
config_path: database.config
- module: myapp.services
class: UserService
config_path: services.user
where config_path references a starting entry in the config.yaml file:
services:
user:
name: "a13x"
email: "a13x.h.cc@gmail.com"
database:
config:
db_path: "data/market_data.db"
enable_wal: true
pragma_synchronous: "NORMAL"
pragma_journal_mode: "WAL"
pragma_cache_size: -2000 # 2MB cache
max_connections: 10
from a13x_depinj import ComponentRegistry, Config
# Load application configuration
config = Config.load_config('config.yaml')
# Initialize components
with ComponentRegistry.from_yaml(config, 'deployment.yaml') as registry:
# Get component instances
db = registry.get(Database)
user_service = registry.get(UserService)
# Use components
db.connect()
Components can be initialized lazily when first accessed:
registry = ComponentRegistry.from_yaml(config, 'deployment.yaml', lazy=True)
Components can implement cleanup methods:
class Database:
def cleanup(self):
# Cleanup resources
pass
The registry will automatically call cleanup when using the context manager or when unregistering components.
The registry supports type hints for better IDE integration:
from typing import TypeVar, Type
T = TypeVar('T')
registry = ComponentRegistry[T]()
db: Database = registry.get(Database)
Contributions are welcome! Please check our Contributing Guidelines for details.
This project is licensed under the MIT License - see the LICENSE file for details.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.2.0 | 10 Mar 2025 | 6 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 16:19 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:d0ea7c8058aa6f1ab42113781792d036d3d466605c63ba00a124ed0b7dec82ed