Skip to main content

Another Config lib for python, basically load config/yaml/toml/... files and add some features like relative import and templating.

Project description

yaconfiglib

PyPI version Python versions License: MIT Docs CI

yaconfiglib is a modern, extensible configuration parser library for Python. It allows you to seamlessly load, merge, and interpolate multiple configurations in a variety of formats (YAML, TOML, JSON, INI, .env), or execute scripts/commands directly to retrieve configuration objects dynamically.

Zero required runtime dependencies (except standard pathlib, with optional packages to enable extra backends).


Features

  • Standard Library API Parity: Drop-in replacements for standard serialization modules using yaconfiglib.load(), loads(), dump(), and dumps().
  • Backend Registry & Plugins: Core loaders for TOML, YAML, JSON, INI, and .env. Easily extend the library by registering custom configuration loader classes.
  • Model Validation (load_as): Automatic hydration and verification of Pydantic models or standard Python dataclasses directly from loaded configuration files.
  • Dot-Notation Access: Configuration results are wrapped in a DotAccessibleDict supporting deep traversal like config.database.credentials.user and toggleable dig options.
  • Shell & Command Execution: Execute arbitrary commands or shell scripts dynamically (e.g. cmd://aws... or ./generate.sh) and auto-parse their outputs, with support for shebang-based format routing (e.g. #!json header).
  • YAML Includes: Out-of-the-box support for !include and !load YAML constructors to seamlessly and recursively import child configurations or commands.
  • Advanced Templating: Interleave configurations with Jinja2. Generate configuration blocks dynamically, auto-inject os.environ via env.VAR_NAME, or reference previously declared values using Jinja's {% do %} statements.
  • Environment Overlays: Load prefixed environment variables as flat or nested configuration, with optional scalar coercion for booleans, numbers, nulls, arrays, and objects.
  • Path Agnostic: Compatible with both standard pathlib.Path and optionally pathlib_next for URI loading (HTTP, SFTP, etc.) exactly like standard file paths.

Installation

Install using pip:

pip install yaconfiglib

Optional dependencies:

Extra Adds Needed for
yaconfiglib[yaml] pyyaml Parsing YAML configuration files and !include tags
yaconfiglib[toml] toml Parsing TOML configuration files
yaconfiglib[jinja2] jinja2 Jinja2 templating, environment variables injection, and transformations

Quick Start

1. Simple Parsing and Dot-Notation Access

import yaconfiglib

# Load a YAML file
config = yaconfiglib.load("config.yaml", interpolate=True)

# Traverse configuration like attributes
print(f"Server starting on: {config.server.host}:{config.server.port}")

2. Hydrate Model (Pydantic / Dataclasses)

from pydantic import BaseModel
import yaconfiglib

class DBConfig(BaseModel):
    host: str
    port: int

# Hydrate the Pydantic model directly
db_settings = yaconfiglib.load_as(DBConfig, "config.yaml", loader="yaml")
print(db_settings.host)

3. Dynamic Includes & Shell Commands

In your config.yaml:

# Recursively include other files
database: !include "db_settings.toml"

# Dynamically execute commands to retrieve parameters (e.g. secrets)
secrets: !include 'cmd+json://python -c "import json; print(json.dumps({\"token\": \"super-secret\"}))"'

4. Environment Variable Overlays

from yaconfiglib import ConfigLoader
from yaconfiglib.backends.env import EnvVarBackend

# APP_DB__PORT=5432 -> {"db": {"port": 5432}}
config = ConfigLoader().load(
    loader=EnvVarBackend(prefix="APP_", nested_delimiter="__", coerce=True)
)

API Overview

Module Purpose
yaconfiglib.loader Core ConfigLoader orchestrator, load(), loads(), dumps(), and DotAccessibleDict
yaconfiglib.backends ConfigBackend protocol & registry
yaconfiglib.backends.yaml YamlConfig parsing and include tag construction
yaconfiglib.backends.toml TomlConfig parsing (using stdlib tomllib or toml package fallback)
yaconfiglib.backends.json JsonConfig parsing
yaconfiglib.backends.ini IniConfig parsing
yaconfiglib.backends.dotenv DotenvBackend for parsing .env files
yaconfiglib.backends.env EnvVarBackend for loading os.environ variables with prefix matching
yaconfiglib.backends.command CommandBackend for running processes and auto-routing outputs
yaconfiglib.backends.python_backend PythonBackend for in-memory python dict injection
yaconfiglib.utils.merge Deep dict/list merge algorithms and custom merge methods
yaconfiglib.utils.jinja2 Custom Jinja2 interpolation environments and render utilities

Development

pip install -e ".[dev]"
pytest -q

Releasing

This project follows Semantic Versioning and keeps a CHANGELOG.md. Pushing a tag matching v* triggers the release workflow: test gate → build → publish → docs deploy.

Documentation site

MkDocs builds the API reference from docs/, published on every release. To preview locally:

.venv/Scripts/pip install -e ".[docs]"
.venv/Scripts/mkdocs serve

License

MIT — see LICENSE.

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

yaconfiglib-0.9.7.tar.gz (47.5 kB view details)

Uploaded Source

Built Distribution

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

yaconfiglib-0.9.7-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file yaconfiglib-0.9.7.tar.gz.

File metadata

  • Download URL: yaconfiglib-0.9.7.tar.gz
  • Upload date:
  • Size: 47.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for yaconfiglib-0.9.7.tar.gz
Algorithm Hash digest
SHA256 6073cae3a043450069b1da848b8c1bf735673ab7f783e53374c216405c4693f0
MD5 8cc08245582c7027d862aa8ca4c13ab2
BLAKE2b-256 b6fdac7355648bc1e0c2f67f30e0a0803a6cf327d8c4a08172e172d024851ab5

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaconfiglib-0.9.7.tar.gz:

Publisher: release.yml on jose-pr/yaconfiglib

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

File details

Details for the file yaconfiglib-0.9.7-py3-none-any.whl.

File metadata

  • Download URL: yaconfiglib-0.9.7-py3-none-any.whl
  • Upload date:
  • Size: 37.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for yaconfiglib-0.9.7-py3-none-any.whl
Algorithm Hash digest
SHA256 933c3f18e0d1b5ac71176804b36fc0fb45164dd6a1f9905a4f61ee2eb449f53e
MD5 532ecd5cc0c174cae2cff7c6509d7161
BLAKE2b-256 b091cdde58c3f786ed3c64a540d09327a97453390dbc70cf8f8ae874e0e48ae2

See more details on using hashes here.

Provenance

The following attestation bundles were made for yaconfiglib-0.9.7-py3-none-any.whl:

Publisher: release.yml on jose-pr/yaconfiglib

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