Skip to main content

A compositional configuration library for Python

Project description

CompoConf

CompoConf is a Python library for compositional configuration management. It provides a type-safe way to define, parse, and instantiate configurations for complex, modular systems.

Features

  • Type-safe configuration parsing with dataclass support
  • Registry-based class instantiation
  • Inheritance-based interface registration
  • Support for nested configurations
  • Optional OmegaConf integration
  • Strict type checking and validation

Installation

pip install compoconf

Quick Start

Here's a simple example of how to use CompoConf:

from dataclasses import dataclass
from compoconf import (
    RegistrableConfigInterface,
    ConfigInterface,
    register_interface,
    register,
)

# Define an interface
@register_interface
class ModelInterface(RegistrableConfigInterface):
    pass

# Define a configuration
@dataclass
class MLPConfig(ConfigInterface):
    hidden_size: int = 128
    num_layers: int = 2

# Register a class with its configuration
@register
class MLPModel(ModelInterface):
    config_class = MLPConfig

    def __init__(self, config):
        self.config = config
        # Initialize model with config...

# Create and use configurations
config = MLPConfig(hidden_size=256)
model = config.instantiate(ModelInterface)

Advanced Usage

Nested Configurations

CompoConf supports nested configurations through type annotations:

@dataclass
class TrainerConfig(ConfigInterface):
    model: ModelInterface.cfgtype  # References the interface type
    learning_rate: float = 0.001

# Parse nested configuration
config = {
    "model": {
        "class_name": "MLPModel",
        "hidden_size": 256
    },
    "learning_rate": 0.01
}

trainer_config = parse_config(TrainerConfig, config)

Type Safety

The library provides comprehensive type checking:

  • Validates configuration values against their type annotations
  • Ensures registered classes match their interfaces
  • Checks for missing required fields
  • Supports strict mode for catching unknown configuration keys

OmegaConf Integration

CompoConf optionally integrates with OmegaConf for enhanced configuration handling:

from omegaconf import OmegaConf

# Load configuration from YAML
conf = OmegaConf.load('config.yaml')
config = parse_config(ModelConfig, conf)

Registry System

The registry system allows for dynamic class instantiation based on configuration:

# Register multiple implementations
@dataclass
class CNNConfig(ConfigInterface):
    kernel_size: int = 4

@register
class CNNModel(ModelInterface):
    config_class = CNNConfig

@dataclass
class TransformerConfig(ConfigInterface):
    hidden_size: int = 128
    num_heads: int = 4

@register
class TransformerModel(ModelInterface):
    config_class = TransformerConfig

# Configuration automatically creates correct instance
config = {
    "model": {
        "class_name": "TransformerModel",
        "num_heads": 8,
        "hidden_size": 512
    }
}

API Reference

Core Classes

  • RegistrableConfigInterface: Base class for interfaces that can be configured
  • ConfigInterface: Base class for configuration dataclasses
  • Registry: Singleton managing registration of interfaces and implementations

Decorators

  • @register_interface: Register a new interface
  • @register: Register an implementation class

Functions

  • parse_config(config_class, data, strict=True): Parse configuration data into typed objects

Enhanced Functionality

Parsing Module

The parsing module has been enhanced to provide more robust and flexible configuration parsing capabilities. Key improvements include:

  • Improved handling of nested configurations and unions.
  • Enhanced type validation and error reporting.
  • Support for parsing configurations from various data sources (e.g., JSON, YAML).

Util Module

The util module now includes powerful utilities for dynamic configuration and validation:

  • partial_call: Enables the creation of configurable classes from functions, allowing for dynamic modification of function arguments through configuration.
  • from_annotations: Simplifies the creation of configurable classes by automatically extracting configuration parameters from class annotations.
  • validate_literal_field and assert_check_literals: Provide mechanisms for validating Literal type annotations in dataclasses, ensuring that configuration values are within the allowed set of options.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License

Author

Korbinian Pöppel (korbip@korbip.de)

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

compoconf-0.1.12.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

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

compoconf-0.1.12-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

File details

Details for the file compoconf-0.1.12.tar.gz.

File metadata

  • Download URL: compoconf-0.1.12.tar.gz
  • Upload date:
  • Size: 38.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for compoconf-0.1.12.tar.gz
Algorithm Hash digest
SHA256 b507c65e3c11f98bb73146d02d9cbe31ba454afbca992923d32befc1a775026a
MD5 7fbe1c14b848b1d3a679cd149790b1ed
BLAKE2b-256 5504c227595fb40c5649181e19b1dd36ae7a8ee4db178e2b8da99a1fc3be8b50

See more details on using hashes here.

Provenance

The following attestation bundles were made for compoconf-0.1.12.tar.gz:

Publisher: publish.yaml on kpoeppel/compoconf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file compoconf-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: compoconf-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 19.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for compoconf-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 59b9954fc4e7470411ebd0865c256a707823d2fe3916277755e1801aa956e824
MD5 03e43480a24c6113f54303e13b3ce058
BLAKE2b-256 7e2851723920b444ca4a28c0625d5f0314749326aab6a60ed6b7505683520f94

See more details on using hashes here.

Provenance

The following attestation bundles were made for compoconf-0.1.12-py3-none-any.whl:

Publisher: publish.yaml on kpoeppel/compoconf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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