Skip to main content

A simple way of using environment variables in TOML configs (via interpolation)

Project description

PyPI Status Python Versions Wheel Status PyPI Downloads Code coverage Status License Status

envTOML is an answer to a fairly simple problem: including values from environment variables in TOML configuration files. In this way, it is very similar to both envyaml and varyaml which provide very similar functionality for YAML and which greatly inspired this small package.

Under the hood it uses the standard library tomllib (and tomli as a fallback for Python < 3.11).

Supports Python 3.10+.

Example

Suppose we have the following configuration saved in config.toml

[db]
host = "$DB_HOST"
port = "$DB_PORT"
username = "$DB_USERNAME"
password = "$DB_PASSWORD"
name = "my_database"

with the environment variables being set to the following

DB_HOST=some-host.tld
DB_PORT=3306
DB_USERNAME=user01
DB_PASSWORD=veryToughPas$w0rd

this config can then be parsed with envTOML in the following way:

import envtoml

cfg = envtoml.load(open('./config.toml', 'rb'))

print(cfg)
# {'db': {'host': 'some-host.tld',
#   'port': 3306,
#   'username': 'user01',
#   'password': 'veryToughPas$w0rd',
#   'name': 'my_database'}}

You can reference multiple environment variables inside a single string:

cfg = envtoml.loads(
    "db_url = 'mysql://$DB_USERNAME:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME'\\n"
)

print(cfg)
# {'db_url': 'mysql://user01:veryToughPas$w0rd@some-host.tld:3306/my_database'}

Default values can be specified with ${VAR:-default}:

cfg = envtoml.loads("region = '${AWS_REGION:-us-east-1}'\\n")
# {'region': 'us-east-1'}

Literal dollar signs can be escaped with $$:

cfg = envtoml.loads("price = '$$19.99'\\n")
# {'price': '$19.99'}

Lists are supported too:

cfg = envtoml.loads("scopes = ['$SCOPE_A', '$SCOPE_B']\\n")

To fail when a referenced env var is missing, pass fail_on_missing=True. This raises ValueError when a variable is not present or is empty:

# Example: fail fast if API_TOKEN is not set.
cfg = envtoml.loads("api_token = '$API_TOKEN'\\n", fail_on_missing=True)
# Raises ValueError: API_TOKEN not found in environment

Tests

This project uses uv. After installing it, run the following from the project’s root directory:

uv sync --group dev
uv run pytest

For coverage:

uv run pytest --cov=envtoml

License

Licensed under the MIT license (see LICENSE file for more details).

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

envtoml-0.4.0.tar.gz (28.5 kB view details)

Uploaded Source

Built Distribution

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

envtoml-0.4.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file envtoml-0.4.0.tar.gz.

File metadata

  • Download URL: envtoml-0.4.0.tar.gz
  • Upload date:
  • Size: 28.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for envtoml-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a5a0be49649535146f86402bc8b723ee47ef005995032f4ccb821f7a88dd64ee
MD5 f3d8de5db39433e93cdf8470208b5488
BLAKE2b-256 1b0bf4366faffcb2123107e2e4c0f6f29bc2f1264e17e697504d2ed9f5ccb9e4

See more details on using hashes here.

File details

Details for the file envtoml-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: envtoml-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for envtoml-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f5a271a9a07622a8e1b467ea20bec5ac91fa0353e24d7385981a25ecbf128d2e
MD5 ebf5ef5009351ca72f7cc1a91da1387e
BLAKE2b-256 47741a217e8900a244add27a6548dcd403569de54a22a9fad52990d3435fba81

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