YAML-based configuration framework with Pydantic validation and dynamic object instantiation
Project description
YAML-based configuration with Pydantic validation and dynamic object instantiation.
Why EzConfy?
ML projects constantly deal with configuration: learning rates, model parameters, dataset options, augmentation pipelines. EzConfy gives you typed, validated configs with automatic object wiring — without the complexity of a full framework like Hydra.
from ezconfy import ConfigBuilder
cfg = ConfigBuilder.from_files(config_paths="config.yaml", schema_path="schema.yaml")
print(cfg.training.batch_size) # validated, typed access
What you get
| Feature | Description |
|---|---|
| Pydantic validation | Type checking with clear error messages |
| Schema-aware casting | Strings become Path objects, etc. — before constructors run |
| Dynamic instantiation | Construct any Python class from YAML via _target_type_ |
| Placeholders | ${key}, attribute access, method calls, arithmetic |
| Multi-file merge | Split configs across files, override per experiment |
| Code generation | Generate Pydantic models for editor autocompletion |
Installation
pip install ezconfy
Requires Python 3.11+.
Quick Start
config.yaml
lr: 0.001
batch_size: 32
data_path: ./data
schema.yaml
lr: float
batch_size: int
data_path: pathlib:Path
train.py
from ezconfy import ConfigBuilder
cfg = ConfigBuilder.from_files(
config_paths="config.yaml",
schema_path="schema.yaml",
)
print(cfg.lr) # 0.001 (float)
print(cfg.batch_size) # 32 (int)
print(cfg.data_path) # PosixPath('data') — automatically cast
Schema
A schema file describes the expected shape and types of your configuration:
types:
OptimizerType:
- adam
- sgd
- rmsprop
schema:
model:
hidden_dims: list[int]
training:
batch_size: int = 32
num_epochs: int = 10
shuffle: bool = true
dropout: float?
optimizer: OptimizerType
If no types are needed, the entire YAML is treated as the root schema (no schema: wrapper required).
Supported type syntax
| Syntax | Meaning |
|---|---|
int, float, str, bool |
Primitive types |
type? |
Optional (defaults to None) |
type = value |
Type with default |
list[T] |
List of T |
A | B |
Union type |
[a, b, c] |
Enum |
Child < Parent |
Model inheritance |
pathlib:Path |
External type (import path) |
/path/to/file.py:ClassName |
External type (file path) |
Object Instantiation
Construct Python objects directly from config using _target_type_:
dataset:
_target_type_: mypackage.data:MyDataset
_init_args_:
num_classes: 100
root: /data
Use _init_method_ for alternative constructors (e.g. from_pretrained):
encoder:
_target_type_: mypackage.models:BertEncoder
_init_method_: from_pretrained
_init_args_:
model_name: bert-base-uncased
Placeholders & Expressions
Reference other config values with ${key}. Supports attribute access, method calls, and arithmetic:
lr: 0.001
warmup_lr: ${lr * 10} # arithmetic
num_classes: 10
dataset:
_target_type_: mypackage.data:MyDataset
_init_args_:
num_classes: ${num_classes} # scalar reference
model:
_target_type_: mypackage.models:Classifier
_init_args_:
in_features: ${dataset.num_classes} # attribute access
params: ${encoder.parameters()} # method call
Objects are instantiated in topological order based on their dependencies — forward references work automatically.
Multi-file Configs & Overrides
Pass multiple files — they are deep-merged in order (later files win on conflicts):
cfg = ConfigBuilder.from_files(
config_paths=["base.yaml", "experiment.yaml"],
)
Apply programmatic overrides on top:
cfg = ConfigBuilder.from_files(
config_paths="config.yaml",
overrides={"training": {"batch_size": 64}},
)
Code Generation CLI
Generate a Pydantic model file from a schema for editor autocompletion and static analysis:
ezconfy generate schema.yaml -o models.py
Documentation
Full documentation: alessioarcara.github.io/EzConfy
License
Project details
Release history Release notifications | RSS feed
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 ezconfy-0.1.10.tar.gz.
File metadata
- Download URL: ezconfy-0.1.10.tar.gz
- Upload date:
- Size: 120.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89495e80c01be0230a3b00a064d95609cbecb03ffceea027e9e2b1c9bfaca4b0
|
|
| MD5 |
caa7baeb3f82e90170ca29bba372d23b
|
|
| BLAKE2b-256 |
63ad110cfa0807841d7ab222c31acb8fb33c65240f4f1c33c56133057d8a3989
|
File details
Details for the file ezconfy-0.1.10-py3-none-any.whl.
File metadata
- Download URL: ezconfy-0.1.10-py3-none-any.whl
- Upload date:
- Size: 18.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8df6f31f55fb220f8e5a17eeb333a083cbb8a3d27b032382b83299d417ab9679
|
|
| MD5 |
4090db5027c9fe9e408285dc3cabe0bf
|
|
| BLAKE2b-256 |
d5340f4e1f55d73845a3868040d36c9b87193d902a16a86be3cd1a0cdb990de0
|