Skip to main content

A lightweight dependency injection framework for Python applications

Project description

a13x-depinj

A lightweight, yet powerful dependency injection framework for Python applications.

Features

  • Simple and intuitive API
  • YAML-based component configuration
  • Lazy component initialization
  • Automatic dependency management
  • Component lifecycle management
  • Type hints support
  • Context manager interface

Installation

pip install a13x-depinj

Quick Start

  1. Define your components:
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)
  1. Create a deployment configuration (deployment.yaml):
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
  1. Initialize the registry:
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()

Advanced Usage

Lazy Initialization

Components can be initialized lazily when first accessed:

registry = ComponentRegistry.from_yaml(config, 'deployment.yaml', lazy=True)

Component Lifecycle Management

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.

Type Hints

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)

Contributing

Contributions are welcome! Please check our Contributing Guidelines for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

a13x_depinj-0.2.0.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

a13x_depinj-0.2.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file a13x_depinj-0.2.0.tar.gz.

File metadata

  • Download URL: a13x_depinj-0.2.0.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.12.9 Linux/6.11.0-19-generic

File hashes

Hashes for a13x_depinj-0.2.0.tar.gz
Algorithm Hash digest
SHA256 8a15c6fe5b4c9a7a6825418933a2148c17a12865c636658d879237ef43b07836
MD5 516bda76cab07898cecc4f960fc07221
BLAKE2b-256 9a9897b166566f2b88944662b8abcf652f182da9abdfcdf0481b3e39d6276d54

See more details on using hashes here.

File details

Details for the file a13x_depinj-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: a13x_depinj-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.1 CPython/3.12.9 Linux/6.11.0-19-generic

File hashes

Hashes for a13x_depinj-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7d9b44cc508458feb0511d87d46e8a2b31f29340c49b9c86560899ac238772f4
MD5 8eae363ad66109346e9968e5e140d05b
BLAKE2b-256 88212934fa878d63f43ce2b829ef632d0c238f4185d38f3bb600cf03614ad292

See more details on using hashes here.

Supported by

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