Skip to main content

Multi-layer configuration management with source tracking

Project description

Confocal

A multi-layer configuration management library built on pydantic with source tracking and profile support.

Features

  • Hierarchical config file discovery (searches parent directories)
  • Profile support for different environments
  • Full source tracking to explain where each config value came from
  • Built on pydantic for robust validation and type safety
  • Rich terminal output for config inspection

Installation

pip install confocal

Quick Start

from confocal import BaseConfig
from pydantic import Field

class MyConfig(BaseConfig):
    database_url: str
    name: str = Field(default="Anonymous")
    debug: bool = False

# Load config from raiconfig.toml, environment variables, etc.
config = MyConfig.load()

# Show where config values came from
config.explain()

Config Sources (in order of precedence)

  1. Initialization arguments
  2. Environment variables
  3. Active profile from config file
  4. Config files (YAML or TOML)
  5. Default values

Using Config Files

Confocal supports both TOML and YAML config files. Specify which format to use in your config class:

Using TOML (default)

class MyConfig(BaseConfig):
    model_config = SettingsConfigDict(
        toml_file="config.toml",
    )

Using YAML

class MyConfig(BaseConfig):
    model_config = SettingsConfigDict(
        yaml_file="config.yaml",
    )

Using Profiles

Profile support works with both TOML and YAML files.

TOML example (raiconfig.toml):

database_url = "postgresql://prod-db:5432"

[profile.dev]
database_url = "postgresql://localhost:5432"
debug = true

[profile.test]
database_url = "postgresql://test-db:5432"

YAML example (config.yaml):

database_url: "postgresql://prod-db:5432"

profile:
  dev:
    database_url: "postgresql://localhost:5432"
    debug: true
  test:
    database_url: "postgresql://test-db:5432"

Activate a profile:

export ACTIVE_PROFILE=dev

YAML Environment Variables

YAML configs support environment variable substitution:

database_url: "{{ env_var('DB_URL', 'postgresql://localhost:5432') }}"
api_key: "{{ env_var('API_KEY') }}"  # Required, will error if not set

Advanced Usage

Show full config inheritance chain:

config.explain(verbose=True)

Manually find nearest config file in parent directories:

from confocal import find_upwards
config_path = find_upwards("config.toml")

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

confocal-0.2.1.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

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

confocal-0.2.1-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file confocal-0.2.1.tar.gz.

File metadata

  • Download URL: confocal-0.2.1.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for confocal-0.2.1.tar.gz
Algorithm Hash digest
SHA256 859ae1218810a708e9fb5d9a98ffd63528fe986ca9ad561a99a870cf165c0ccc
MD5 6c4d4363d8c56034f6479a649e9a595b
BLAKE2b-256 b6b4fb7cbb267b9ba4b8934eaa6f6ebfffe5dacfe9fb804562781b284746d98b

See more details on using hashes here.

File details

Details for the file confocal-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: confocal-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 13.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for confocal-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d1e2e4199cfea5b4f6e048a692326692ccefa3e4818cde3708d99e0ed50bebd6
MD5 10386c6e1e7877d88b68ee14d21badcf
BLAKE2b-256 f99ec7906e206c51c33586c21e98feb552f75b9ce3b7ab9a11872605842267e4

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