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.8.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.8-py3-none-any.whl (5.6 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for philiprehberger_config_kit-0.1.8.tar.gz
Algorithm Hash digest
SHA256 5f6fa7fdf2e41b90ce1cda9be333235c92a449eae54312aa63edb9172939b766
MD5 8a6f3bf071250bfe22607639a403aef4
BLAKE2b-256 7d1cd92ce1ed67d836f565d360e71ef6b73b63cd2c7caf5e9f544d12b0cdd44d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for philiprehberger_config_kit-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ac5594ab6c5527cbbecc0f39269af3037cb40ed677fc258e9be4082dfa3131d3
MD5 7d9002ef09a4a1ef4fd6c66dde4f3d0e
BLAKE2b-256 3a985c9371d58219afc5b3d65a8b37c59a67ba3ba13b7b66c2cb2301361460ed

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