Skip to main content

A library to auto-create and validate TOML configuration files from templates

Project description

TOML-Init

A lightweight Python library for auto-creating and validating TOML-based configuration files from one or more default templates.

For use where you use multiple relatively independent modules that need config values and you want a standardized way to handle, implement, and validate.


Defaults

Variable Value
DEFAULT_CONFIG_FOLDER_PATH <Current Working Directory>/config
DEFAULT_CONFIG_DEFAULT_FOLDER_PATH <Current Working Directory>/defaults
DEFAULT_CONFIG_FILE "config.toml"

Features

  • Automatic directory setup

    • Ensures your primary configs/ directory and its defaults/ subdirectory exist (creates them if missing).
  • Defaults merging

    • Scans all *.toml files under configs/defaults/. Each top-level TOML table is treated as a “block” of settings.
    • Merges multiple default files into a single master config.toml, with conflict detection.
  • Schema-driven validation

    • Each setting may be declared in two ways:

      1. Simple: KEY = <defaultValue>
      2. Full: KEY = { defaultValue = <...>, type = "<int|float|bool|str>", min = <...>, max = <...>, allowedValues = [...], validator = "<name>" }
    • Supports numeric range checks (min/max), enumerations (allowedValues), and custom validation hooks.

  • Custom validators

    • Implement by subclassing Validator and registering via register_validator("name", instance).
    • Allows arbitrary user‑defined checks (e.g. path existence, regex match).
  • Preserves user overrides

    • If users manually edit config.toml, extra keys remain intact.
    • Invalid values are reset to defaults with a logged warning.
  • CLI & programmatic API

    • Installable console script: toml-init for quick command-line setup.
    • ConfigManager class for embedding in Python code.
  • Dry‑run & logging

    • --dry-run to validate without writing changes.
    • Verbose mode with --verbose for debug logging.

Installation

pip install toml-init

Package Structure

toml_init
├── __init__.py
├── __main__.py
├── exceptions.py
├── validators.py
└── manager.py

Quickstart (Python)

from pathlib import Path
from toml_init import ConfigManager, register_validator, Validator

# Optional: register a custom validator
class PathExistsValidator(Validator):
    def validate(self, value):
        from pathlib import Path as P
        if not (isinstance(value, str) and P(value).exists()):
            raise InvalidConfigValueError(f"Path not found: {value}")
        return value

register_validator("path_exists", PathExistsValidator())

# Initialize and validate
cm = ConfigManager(
    base_path=Path("configs"),
    defaults_path=Path("configs/defaults"),
    master_filename="config.toml"
)
cm.initialize(dry_run=False)

# Access validated settings
settings = cm.get_block("QuickBooks.Invoices.Saver")
print(settings["WINDOW_LOAD_DELAY"])  # e.g. 0.5

Quickstart (CLI)

# Create or validate configs in ./configs (defaults in ./configs/defaults)
toml-init

# Verbose & dry-run (no file writes)
toml-init --verbose --dry-run

# Custom paths
 toml-init --base /etc/myapp/configs \
           --defaults /etc/myapp/configs/defaults \
           --master settings.toml

Example Project

A working sample lives under example_project/. Run python run_demo.py inside that directory to generate config.toml using the defaults in configs/defaults/example_defaults.toml.

Default File Format

Place your default templates in configs/defaults/. Each file may define multiple blocks (tables):

# defaults/app_defaults.toml

[__meta__]
name = "Config - QuickBooks Invoice Saver"
module_version = "0.1.0"

[QuickBooks.Invoices.Saver]
SHOW_TOASTS = true
WINDOW_LOAD_DELAY  = { defaultValue = 0.5,  type = "float", min = 0.0 }
NAVIGATION_DELAY   = { defaultValue = 0.15, type = "float", min = 0.0 }

[MyApp.Logging]
LEVEL       = { defaultValue = "INFO", type = "str", allowedValues = ["DEBUG","INFO","WARN","ERROR"] }
ENABLE_LOGS = { defaultValue = true,   type = "bool" }
  • Block names = the table names (e.g. QuickBooks.Invoices.Saver).

  • Settings under each block may be:

    • A primitive default: KEY = 123 (shorthand for a setting with only defaultValue).
    • A full schema object: specifying type, optional min/max, allowedValues, and validator.
  • An optional [__meta__] table may be present and is ignored by the library.

Supported Types

  • int, float, bool, str, list, dict, datetime, date, time
  • Numeric range checks with min/max
  • Enumerations via allowedValues
  • Custom hooks via validator (must match a registered Validator)

Exception Hierarchy

  • TomlInitError (base)

    • MultipleConfigFilesError
    • InvalidDefaultSchemaError
    • InvalidConfigValueError
    • BlockConflictError

Catch these to handle specific error cases gracefully.


Potential Future Features

Feature Description
Multiple config files Will support having separate config files for organization purposes?
Comment injection Allow comments to be specified in the defaults?

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

toml_init-0.1.0.tar.gz (14.5 kB view details)

Uploaded Source

Built Distribution

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

toml_init-0.1.0-py3-none-any.whl (13.7 kB view details)

Uploaded Python 3

File details

Details for the file toml_init-0.1.0.tar.gz.

File metadata

  • Download URL: toml_init-0.1.0.tar.gz
  • Upload date:
  • Size: 14.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for toml_init-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f69f5ba15c8722c45054d43d876ac1a352061b9e0c8f52abbf258be3c40d6026
MD5 8d5963cd981f49b08c179bca51c876fd
BLAKE2b-256 f9838d54118d3fe56cbe72ef85a71568f4f1a89829186113945878c92688e3dc

See more details on using hashes here.

File details

Details for the file toml_init-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: toml_init-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.10

File hashes

Hashes for toml_init-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6c342bb05c416ef9803ef64b5131b75dbf995528e337cf4eb3e1419c69883d8d
MD5 6b2fb1ff035fdbd550b2f198403ce6fc
BLAKE2b-256 473558ec4ed7211bca09b96871036db7e5b118c8107c3ccc70bb189ddba6d726

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