Skip to main content

YAML-based configuration framework with Pydantic validation and dynamic object instantiation

Project description

EzConfy logo

YAML-based configuration with Pydantic validation and dynamic object instantiation.

PyPI version Python versions License


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

MIT

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

ezconfy-0.1.10.tar.gz (120.1 kB view details)

Uploaded Source

Built Distribution

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

ezconfy-0.1.10-py3-none-any.whl (18.4 kB view details)

Uploaded Python 3

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

Hashes for ezconfy-0.1.10.tar.gz
Algorithm Hash digest
SHA256 89495e80c01be0230a3b00a064d95609cbecb03ffceea027e9e2b1c9bfaca4b0
MD5 caa7baeb3f82e90170ca29bba372d23b
BLAKE2b-256 63ad110cfa0807841d7ab222c31acb8fb33c65240f4f1c33c56133057d8a3989

See more details on using hashes here.

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

Hashes for ezconfy-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 8df6f31f55fb220f8e5a17eeb333a083cbb8a3d27b032382b83299d417ab9679
MD5 4090db5027c9fe9e408285dc3cabe0bf
BLAKE2b-256 d5340f4e1f55d73845a3868040d36c9b87193d902a16a86be3cd1a0cdb990de0

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