Skip to main content

Layered configuration loader merging env vars, files, and defaults

Project description

philiprehberger-config-kit

Tests PyPI version License

Layered configuration loader merging env vars, files, and defaults.

Installation

pip install philiprehberger-config-kit

Usage

from philiprehberger_config_kit import Config

config = Config(
    sources=[
        Config.defaults({"port": 3000, "debug": False, "log_level": "info"}),
        Config.json_file("config.json", optional=True),
        Config.env_file(".env", optional=True),
        Config.env(prefix="APP_"),
    ]
)

# Typed access
port = config.get_int("port")
debug = config.get_bool("debug")
db_url = config.get_str("database_url")
timeout = config.get_float("timeout", default=5.0)
hosts = config.get_list("allowed_hosts")

# Nested access (dot notation)
redis_host = config.get_str("redis.host")

# Validation
config.require("database_url", "secret_key")  # raises ConfigError if missing

# Check existence
if config.has("cache_ttl"):
    ttl = config.get_int("cache_ttl")

Source Priority

Sources are applied in order — later sources override earlier ones:

Config(sources=[
    Config.defaults({...}),       # lowest priority
    Config.json_file("..."),      # overrides defaults
    Config.env_file(".env"),      # overrides JSON
    Config.env(prefix="APP_"),    # highest priority
])

Environment Variables

With prefix="APP_", env vars are mapped:

  • APP_PORTport
  • APP_DATABASE__HOSTdatabase.host (double underscore = nested)

.env Files

DATABASE_URL=postgresql://localhost/mydb
SECRET_KEY="my-secret"
DEBUG=true

Bool Coercion

get_bool() accepts: true/false, 1/0, yes/no, on/off

API

Function / Class Description
Config(sources) Layered configuration with typed access via get(), get_str(), get_int(), get_float(), get_bool(), get_list()
ConfigError(missing) Raised when required config keys are missing

Development

pip install -e .
python -m pytest tests/ -v

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

philiprehberger_config_kit-0.1.6.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

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

philiprehberger_config_kit-0.1.6-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_config_kit-0.1.6.tar.gz.

File metadata

File hashes

Hashes for philiprehberger_config_kit-0.1.6.tar.gz
Algorithm Hash digest
SHA256 1b38e7445525eef706c9e5ad3658eb549a1412ecb8d3a806ca5ad9c6371c5f94
MD5 21fd0b1b2cfd62516eda179581b793f8
BLAKE2b-256 41d8d8c5410a5019d4669de96338b56ef9bf752bb4469d52a88491629eeb688e

See more details on using hashes here.

File details

Details for the file philiprehberger_config_kit-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_config_kit-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 92a374ec3f1f8a923bc962aa07c286d15d269fcbf3e62078f7d9612e6a2bc00f
MD5 36a43fd74855c30e063c1bfe990df542
BLAKE2b-256 f5f109063d2863f8ac1ee6be1983b61b83d7b19ef685004714a912d7d97a159f

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