Skip to main content

Unified config library — TOML, JSON, YAML, and CONF interchangeably

Project description

Alfig

CI PyPI Python License

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 tomllib for reading TOML. For writing TOML, tomli-w is 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


DominionDev

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

alfig_py-0.1.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

alfig_py-0.1.0-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

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

Hashes for alfig_py-0.1.0.tar.gz
Algorithm Hash digest
SHA256 82cbce262a397fe14d23ac5b0a35e68f2da8993379c0b9cc77a1a603aea7e952
MD5 fff25a601b718c4cc7fc97f8f06c2512
BLAKE2b-256 badce759f9ab11a03bcd15bd50e59f6836735f480157aa7fb61f4d602271fc47

See more details on using hashes here.

Provenance

The following attestation bundles were made for alfig_py-0.1.0.tar.gz:

Publisher: release.yml on dominionthedev/alfig

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

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

Hashes for alfig_py-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 14177d2123145ec974a53ddd029992647a3ba4d4d530e020f87344cae7c82415
MD5 308237b8ef530c925e1127b767d53467
BLAKE2b-256 30d8351d17470916816ac2dfbf70cc36875af752b3f3becd7d8db6109ad00af9

See more details on using hashes here.

Provenance

The following attestation bundles were made for alfig_py-0.1.0-py3-none-any.whl:

Publisher: release.yml on dominionthedev/alfig

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