Skip to main content

Python tool to generate environment variables from schemas

Project description

pyenvgen

Warning: This project was vibe coded and is in early development. Expect breaking changes and incomplete features. Contributions are welcome!

Python tool to generate environment variables from YAML schemas.

  1. Define variables in a YAML schema, including types, generation rules, and validation constraints.
  2. Existing values are loaded from the chosen storage backend.
  3. Values are generated (with existing/overridden values taking precedence), then validated.
  4. The final environment is written back to the storage backend.

Installation

pip install pyenvgen

Usage

pyenvgen <schema.yaml> [-s STORAGE] [-o KEY=VALUE ...] [--force]
Flag Description
-s, --storage Storage backend (default: stdout)
-o, --override Override a value via KEY=VALUE (repeatable)
--force Regenerate all values, ignoring existing stored values
# Print to stdout
pyenvgen examples/basic.yaml

# Write to a .env file
pyenvgen examples/basic.yaml -s .env

# Override a value
pyenvgen examples/basic.yaml -o APP_PORT=9000

Schema format

variables:
  MY_VAR:
    type: str          # str | int | float | bool (default: str)
    description: "..."
    internal: false    # default: false
    generation:
      rule: default
      value: "hello"
    validation:
      length:
        min: 1
        max: 128

Variable types

str, int, float, bool

Generation rules

All string fields in generation rules are rendered as Jinja2 templates against already-generated values before execution.

  • default – use a static value (supports Jinja2, e.g. "postgres://{{ HOST }}:{{ PORT }}/app")
  • command – run a shell command and capture its stdout
  • openssl – generate cryptographic material via the cryptography package

openssl commands

Command Description Key args
rsa RSA private key (PEM or DER base64) key_size (default 2048), encoding (pem|der_b64)
ec EC private key curve (secp256r1|secp384r1|secp521r1|secp256k1), encoding (pem|der_b64)
ed25519 Ed25519 private key encoding (pem|raw_b64)
x25519 X25519 private key encoding (pem|raw_b64, default raw_b64)
fernet URL-safe base64 Fernet key
random Random bytes length (default 32), encoding (hex|base64|base64url)

Validation rules

Backed by marshmallow.

Rule Applies to Fields
length str min, max
range int, float min, max, min_inclusive, max_inclusive
one_of any choices: [...]
regexp any pattern

Storage backends

Value Description
stdout Print to standard output
.env Read/write a .env file
json Read/write a JSON file
toml Read/write a TOML file
yaml Read/write a YAML file

Special properties

  • internal: true – the variable is generated and available to Jinja2 templates but excluded from the output.

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

pyenvgen-0.1.0.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

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

pyenvgen-0.1.0-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pyenvgen-0.1.0.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyenvgen-0.1.0.tar.gz
Algorithm Hash digest
SHA256 862e2a96c6add48240801e262589e057ab37a8849f96c846f10f95cf92625101
MD5 0dddbba31d2d61b8cb25fdb91edb70f8
BLAKE2b-256 163ecf49338e62c64a4a5a3b78e22f06638eca76ff7750fae8749f0bc40ac1ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyenvgen-0.1.0.tar.gz:

Publisher: publish-to-pypi.yml on bastienlc/pyenvgen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

  • Download URL: pyenvgen-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pyenvgen-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a414993eab148606edc7a7968fa8ef4f84c48d57645da8509fb817ce7a80a574
MD5 fbacf14a690c86422ef9c81f2d98aec4
BLAKE2b-256 009782b2136449905d4b28c4f8c6ba359aaf5a66a088a8d8f25a04088bdad324

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyenvgen-0.1.0-py3-none-any.whl:

Publisher: publish-to-pypi.yml on bastienlc/pyenvgen

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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