Skip to main content

Add your description here

Project description

Django Envtools

A Django package that enhances the environs library by adding management commands to simplify environment variable handling.

Management Commands

  • create_env_file: Creates a new .env file with default values, help text, and initial value hooks for environment variables.
  • diff_env_file: Displays differences between your .env file and the environment variables in your Django settings.

Installation

Install via uv or pip:

uv add django-envtools

# or

pip install django-envtools

Usage

First, add django_envtools to your INSTALLED_APPS in settings.py:

INSTALLED_APPS = [
    ...
    'django_envtools',
]

Then, update your settings to use the Env class to read environment variables. Django Environs adds two keyword arguments that regular environs doesn't have: help_text and initial. The help_text argument provides guidance on each environment variable, and the initial argument generates an initial value for .env using either a callable or a string path to a callable.

For example, if you have the following in your settings.py:

from pathlib import Path
from django_envtools import Env

BASE_DIR = Path(__file__).resolve().parent.parent

# Initialize environs and load environment variables from .env file
env = Env()
env.read_env(BASE_DIR / ".env")

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env.str(
    "SECRET_KEY",
    help_text="Django's secret key, see https://docs.djangoproject.com/en/dev/ref/settings/#secret-key for more information",
    initial="django.core.management.utils.get_random_secret_key",
)

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env.bool("DEBUG", default=False, help_text="Set to `on` to enable debugging")

ALLOWED_HOSTS = env.list(
    "ALLOWED_HOSTS",
    default=[],
    help_text="List of allowed hosts (e.g., `127.0.0.1,example.com`), see https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for more information",
)

DATABASES = {
    "default": env.dj_db_url(
        "DATABASE_URL",
        default="sqlite:///db.sqlite3",
        help_text="Database URL, see https://github.com/jazzband/dj-database-url for more information",
    )
}

# See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL
email = env.dj_email_url(
    "EMAIL_URL",
    default="smtp://skroob@planetspaceball.com:12345@smtp.planetspaceball.com:587/?ssl=True&_default_from_email=President%20Skroob%20%3Cskroob@planetspaceball.com%3E",
    help_text="See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL",
)
DEFAULT_FROM_EMAIL = email["DEFAULT_FROM_EMAIL"]
EMAIL_HOST = email["EMAIL_HOST"]
EMAIL_PORT = email["EMAIL_PORT"]
EMAIL_HOST_PASSWORD = email["EMAIL_HOST_PASSWORD"]
EMAIL_HOST_USER = email["EMAIL_HOST_USER"]
EMAIL_USE_TLS = email["EMAIL_USE_TLS"]

After setting up, you can run the management command ./manage.py create_env_file to generate a .env file with the following content:

# This is an initial .env file generated on 2024-10-31T19:21:56.174711+00:00. Any environment variable with a default
# can be safely removed or commented out. Any variable without a default must be set.

# Django's secret key, see https://docs.djangoproject.com/en/dev/ref/settings/#secret-key for more information
# type: str
SECRET_KEY=redacted-secret-key

# Set to `on` to enable debugging
# type: bool
# default: False
# DEBUG=

# List of allowed hosts (e.g., `127.0.0.1,example.com`), see https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for more information
# type: list
# default: []
# ALLOWED_HOSTS=

# Database URL, see https://github.com/jazzband/dj-database-url for more information
# type: dj_db_url
# default: sqlite:///db.sqlite3
# DATABASE_URL=

# See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL
# type: dj_email_url
# default: smtp://skroob@planetspaceball.com:12345@smtp.planetspaceball.com:587/?ssl=True&_default_from_email=President%20Skroob%20%3Cskroob@planetspaceball.com%3E
# EMAIL_URL=

As the project grows, you can run ./manage.py diff_env_file to identify differences between your .env file and settings.py, helping you spot missing or orphaned environment variables.

An example output might look like:

Environment variables missing in .env file:
- ALLOWED_HOSTS
- DEBUG

Environment variables missing in .env file with default values:
- DATABASE_URL

Environment variables in .env file that are not defined in your Django settings:
- FOO
- BAR

Contributing

Contributions are welcome! Please open an issue or submit a pull request. If you have any questions, feel free to reach out.

License

This project is licensed under the MIT License.

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

django_envtools-0.1.0.tar.gz (35.0 kB view details)

Uploaded Source

Built Distribution

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

django_envtools-0.1.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_envtools-0.1.0.tar.gz
  • Upload date:
  • Size: 35.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.12

File hashes

Hashes for django_envtools-0.1.0.tar.gz
Algorithm Hash digest
SHA256 089c0cd7245ef01eb49756c032972173218a42bc77216528acb94ca95a05769e
MD5 f05fe787f51e69010a02c7f080245d86
BLAKE2b-256 26e755154879ae608596be242d6b003f84ab6795c590206f723487113fad4c2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for django_envtools-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9f5b3b28ec6b18287b5f8f7d51c2efb64d5d125218b35c1de2098230f42496e9
MD5 f58be472555f2f24f1e183bf5aa63a4d
BLAKE2b-256 e80e65fd1e0fb6bf30b2a2d4747feafe886f454c4c3f69567b297b524c53d934

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