objectstate
Generic lazy dataclass configuration framework with dual-axis inheritance
Overview
objectstate is a Python framework for managing hierarchical configuration using lazy dataclasses with dual-axis inheritance. It provides a clean, type-safe way to handle configuration across different contexts (global, pipeline, step) without manual parameter passing.
Key Features
Lazy Dataclass Factory: Dynamically create dataclasses with lazy field resolution
Dual-Axis Inheritance:
X-Axis: Context hierarchy (Step → Pipeline → Global)
Y-Axis: Sibling inheritance within same context
Contextvars-Based: Uses Python’s
contextvarsfor clean context managementUI Integration: Placeholder text generation for configuration forms
Thread-Safe: Thread-local global configuration storage
100% Generic: No application-specific dependencies
Pure Stdlib: No external dependencies
Installation
pip install objectstate
Quick Example
from dataclasses import dataclass
from objectstate import (
set_base_config_type,
LazyDataclassFactory,
config_context,
)
# Define your base configuration
@dataclass
class GlobalConfig:
output_dir: str = "/tmp"
num_workers: int = 4
debug: bool = False
# Initialize framework
set_base_config_type(GlobalConfig)
# Create lazy version
LazyGlobalConfig = LazyDataclassFactory.make_lazy_simple(GlobalConfig)
# Use with context
global_cfg = GlobalConfig(output_dir="/data", num_workers=8)
with config_context(global_cfg):
lazy_cfg = LazyGlobalConfig()
print(lazy_cfg.output_dir) # "/data" (resolved from context)
print(lazy_cfg.debug) # False (inherited from defaults)
Why objectstate?
Before (Manual parameter passing)
def process_step(data, output_dir, num_workers, debug, ...):
# Pass 20+ parameters through every function
result = sub_process(data, output_dir, num_workers, debug, ...)
return result
def sub_process(data, output_dir, num_workers, debug, ...):
# Repeat parameter declarations everywhere
...
After (objectstate)
@dataclass
class StepConfig:
output_dir: str = None
num_workers: int = None
debug: bool = None
def process_step(data, config: LazyStepConfig):
# Config fields resolve automatically from context
print(config.output_dir) # Resolved from context hierarchy
result = sub_process(data, config)
return result
Requirements
Python 3.10+
No external dependencies (pure stdlib)
Contents
User Guide
API Reference