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.1.tar.gz (32.3 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.1-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for django_envtools-0.1.1.tar.gz
Algorithm Hash digest
SHA256 24f3a6ababe094e1ad8b5aefd9bff25a9230bd5af2091f8ec4ce082e5f45307c
MD5 4b5a2e0c71368873502cdfed8b4bca63
BLAKE2b-256 20e9d1fbeddda6470520f8613fa0f13be02854c16e83b5dadab29bec65db9193

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for django_envtools-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 28e87c59d6e5ba8d07df177b02833c083c891ec69f00e9d5113683f663cdda61
MD5 12077a980b89570bb755db9dd135b8fb
BLAKE2b-256 e62ca9be9655751a6256add14f10b2aa4b0bad4903111ba5d766ca186ba4b6bb

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