Unified config library — TOML, JSON, YAML, and CONF interchangeably
Project description
A config library that lets you use TOML, JSON, YAML, and .conf files interchangeably,
with a single canonical schema, validation, and automatic format conversion.
Install
pip install alfig-py
# With optional format support:
pip install alfig-py[yaml] # adds PyYAML
pip install alfig-py[toml] # adds tomli-w (for writing TOML)
pip install alfig-py[all] # everything
Python 3.11+ includes
tomllibfor reading TOML. For writing TOML,tomli-wis required.
Quick Start
from alfig import Alfig
# Define your schema once
schema = {
"database": {
"host": str,
"port": int,
"user": str,
"password": (str, "secret"), # (type, default)
},
"features": {
"enable_logging": bool,
"max_threads": (int, 4),
},
}
# Create instance
config = Alfig(schema)
# Load from any supported format — auto-detected by extension
config.load("settings.yaml") # or .json, .toml, .conf, .ini
# Validate against schema (fills in defaults for optional fields)
config.validate()
# Access values with dot-notation
db_host = config.get("database.host")
threads = config.get("features.max_threads") # → 4 (default)
# Modify values
config.set("features.max_threads", 16)
# Save to any format
config.save("settings.json")
config.save("settings.toml")
config.save("settings.conf")
Schema Reference
| Definition | Meaning |
|---|---|
"field": str |
Required string field |
"field": int |
Required int field |
"field": bool |
Required bool field |
"field": float |
Required float field |
"field": list |
Required list field |
"field": dict |
Required dict field |
"field": (str, "x") |
Optional string, default "x" |
"field": (int, 0) |
Optional int, default 0 |
"section": {...} |
Nested section |
Supported Formats
| Format | Extension | Read | Write | Notes |
|---|---|---|---|---|
| JSON | .json |
✓ | ✓ | Built-in |
| YAML | .yaml .yml |
✓ | ✓ | Requires PyYAML |
| TOML | .toml |
✓ | ✓ | Read: tomllib (builtin 3.11+) / tomli; Write: tomli-w or toml |
| CONF | .conf .ini |
✓ | ✓ | Custom parser (see below) |
CONF Format — Nested Sections
The .conf format uses dot-notation section headers for nesting:
# settings.conf
[database]
host = localhost
port = 5432
enabled = true
[database.replica]
host = replica.local
port = 5433
[features]
max_threads = 8
tags = ["web", "api"]
This maps to the same dict as the equivalent JSON:
{
"database": {
"host": "localhost",
"port": 5432,
"enabled": true,
"replica": {
"host": "replica.local",
"port": 5433
}
},
"features": {
"max_threads": 8,
"tags": ["web", "api"]
}
}
Auto-coercion rules (all CONF values are strings at parse time):
| Raw value | Python type |
|---|---|
true / false |
bool |
42 |
int |
3.14 |
float |
["a", "b"] |
list |
{"x": 1} |
dict |
| everything else | str |
API Reference
Alfig(schema=None)
Create a config instance. schema is optional — omit it to skip validation.
.load(path, format=None) → self
Load from a file. Format auto-detected from extension unless overridden.
.loads(text, format) → self
Load from a raw string.
.load_dict(data) → self
Load directly from a Python dict.
.validate() → self
Validate against schema, filling defaults. Raises ValidationError on failure.
.get(key_path, default=None) → value
Read a value with dot-notation: config.get("database.host").
.set(key_path, value) → self
Write a value with dot-notation. Creates intermediate dicts as needed.
.delete(key_path) → self
Remove a key.
.as_dict() → dict
Return a deep copy of the internal data.
.save(path, format=None) → self
Save to a file. Format auto-detected from extension unless overridden.
.dumps(format) → str
Serialize to a string in the given format.
Alfig.convert(input_path, output_path, ...) (static)
Convert a file from one format to another without instantiating Alfig.
CLI
# Convert between formats
alfig convert settings.toml --to json
alfig convert settings.yaml --to conf --out app.conf
# Validate / inspect a file
alfig validate settings.yaml
alfig validate settings.yaml --verbose # prints parsed JSON
# Read a single value
alfig get settings.yaml database.host
Project Structure
alfig/
├── __init__.py # Public API
├── core.py # Alfig class
├── schema.py # Validation engine
├── cli.py # CLI entry point
└── formats/
├── __init__.py # Format registry
├── json_fmt.py
├── yaml_fmt.py
├── toml_fmt.py
└── conf_fmt.py # Custom nested INI parser
License
MIT © dominionthedev
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 alfig_py-0.1.0.tar.gz.
File metadata
- Download URL: alfig_py-0.1.0.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82cbce262a397fe14d23ac5b0a35e68f2da8993379c0b9cc77a1a603aea7e952
|
|
| MD5 |
fff25a601b718c4cc7fc97f8f06c2512
|
|
| BLAKE2b-256 |
badce759f9ab11a03bcd15bd50e59f6836735f480157aa7fb61f4d602271fc47
|
Provenance
The following attestation bundles were made for alfig_py-0.1.0.tar.gz:
Publisher:
release.yml on dominionthedev/alfig
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
alfig_py-0.1.0.tar.gz -
Subject digest:
82cbce262a397fe14d23ac5b0a35e68f2da8993379c0b9cc77a1a603aea7e952 - Sigstore transparency entry: 1017915870
- Sigstore integration time:
-
Permalink:
dominionthedev/alfig@5a806daaecfc19eda270305d059dd4c493b0b3e2 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dominionthedev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5a806daaecfc19eda270305d059dd4c493b0b3e2 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file alfig_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: alfig_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
14177d2123145ec974a53ddd029992647a3ba4d4d530e020f87344cae7c82415
|
|
| MD5 |
308237b8ef530c925e1127b767d53467
|
|
| BLAKE2b-256 |
30d8351d17470916816ac2dfbf70cc36875af752b3f3becd7d8db6109ad00af9
|
Provenance
The following attestation bundles were made for alfig_py-0.1.0-py3-none-any.whl:
Publisher:
release.yml on dominionthedev/alfig
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
alfig_py-0.1.0-py3-none-any.whl -
Subject digest:
14177d2123145ec974a53ddd029992647a3ba4d4d530e020f87344cae7c82415 - Sigstore transparency entry: 1017915874
- Sigstore integration time:
-
Permalink:
dominionthedev/alfig@5a806daaecfc19eda270305d059dd4c493b0b3e2 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/dominionthedev
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@5a806daaecfc19eda270305d059dd4c493b0b3e2 -
Trigger Event:
workflow_run
-
Statement type: