Skip to main content

The most comprehensive, production-ready environment variable validation library for Python

Project description

๐Ÿš€ envvar-validator

The most comprehensive, production-ready environment variable validation library for Python

PyPI version Python 3.8+ License: MIT Code style: black Tests Documentation

The definitive solution for Python environment variable validation that developers choose because it's genuinely the best tool available.

๐Ÿ“ฆ Installation

pip install envvar-validator

View on PyPI

๐ŸŒŸ Why envvar-validator?

envvar-validator is the most comprehensive, feature-rich environment variable validation library for Python. Built with production-ready features, security-first design, and exceptional developer experience, it's the tool that will revolutionize how you manage environment variables.

โœจ Key Features

  • ๐Ÿ”’ Advanced Security: Secret scanning, compliance validation, encryption key verification
  • ๐Ÿš€ Framework Integration: Seamless Django, Flask, FastAPI support
  • ๐Ÿ“Š Monitoring & Observability: Health checks, drift detection, performance metrics
  • ๐Ÿ› ๏ธ Developer Tools: CLI, interactive setup, codebase scanning
  • ๐Ÿ—๏ธ Team Collaboration: Shared templates, audit logging, change notifications
  • ๐Ÿ”ง Extensible Architecture: Plugin system, custom validators, middleware support
  • ๐Ÿ“ฑ Cross-Platform: Windows, macOS, Linux support
  • ๐ŸŽฏ Zero Configuration: Works out of the box with sensible defaults

๐Ÿš€ Quick Start

Installation

from env_validator import EnvironmentValidator, ValidationError

# Define your environment schema
validator = EnvironmentValidator({
    "DATABASE_URL": {
        "type": "str",
        "required": True,
        "validators": ["database_url"]
    },
    "API_KEY": {
        "type": "str", 
        "required": True,
        "validators": ["api_key"],
        "sensitive": True
    },
    "DEBUG": {
        "type": "bool",
        "default": False
    },
    "PORT": {
        "type": "int",
        "default": 8000,
        "validators": ["port_range"]
    }
})

# Validate your environment
try:
    config = validator.validate()
    print(f"โœ… Environment validated successfully!")
    print(f"Database: {config.DATABASE_URL}")
    print(f"Debug mode: {config.DEBUG}")
except ValidationError as e:
    print(f"โŒ Environment validation failed: {e}")

Framework Integration

Django

# settings.py
from env_validator import DjangoEnvironmentValidator

env = DjangoEnvironmentValidator({
    "SECRET_KEY": {"type": "str", "required": True, "validators": ["secret_key"]},
    "DATABASE_URL": {"type": "str", "required": True, "validators": ["database_url"]},
    "DEBUG": {"type": "bool", "default": False},
    "ALLOWED_HOSTS": {"type": "list", "default": ["localhost"]},
})

# Validate and load environment
config = env.validate()

SECRET_KEY = config.SECRET_KEY
DATABASES = {
    'default': env.parse_database_url(config.DATABASE_URL)
}
DEBUG = config.DEBUG
ALLOWED_HOSTS = config.ALLOWED_HOSTS

FastAPI

# config.py
from env_validator import FastAPIEnvironmentValidator
from pydantic import BaseSettings

class Settings(BaseSettings):
    env_validator = FastAPIEnvironmentValidator({
        "DATABASE_URL": {"type": "str", "required": True},
        "API_KEY": {"type": "str", "required": True, "sensitive": True},
        "ENVIRONMENT": {"type": "str", "default": "development"},
    })
    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.env_validator.validate()

settings = Settings()

๐Ÿ› ๏ธ CLI Tools

Environment Validation

# Validate current environment
envvar-validator validate

# Validate with custom schema file
envvar-validator validate --schema schema.yaml

# Generate environment report
envvar-validator report --output html

Interactive Setup

# Interactive environment setup wizard
envvar-validator setup

# Generate configuration templates
envvar-validator template --framework django

Security Scanning

# Scan for secrets and sensitive data
envvar-validator scan --secrets

# Compliance check
envvar-validator scan --compliance gdpr

๐Ÿ”ง Advanced Features

Custom Validators

from env_validator import BaseValidator, ValidationError

class CustomAPIValidator(BaseValidator):
    def validate(self, value: str) -> str:
        if not value.startswith("api_"):
            raise ValidationError("API key must start with 'api_'")
        return value

validator = EnvironmentValidator({
    "API_KEY": {
        "type": "str",
        "validators": [CustomAPIValidator()]
    }
})

Environment-Specific Configurations

validator = EnvironmentValidator({
    "DATABASE_URL": {
        "type": "str",
        "required": True,
        "environments": {
            "development": "sqlite:///dev.db",
            "staging": {"type": "str", "validators": ["database_url"]},
            "production": {"type": "str", "validators": ["database_url", "ssl_required"]}
        }
    }
})

Monitoring Integration

from env_validator import MonitoringValidator

# Health check endpoint
@app.get("/health/env")
async def environment_health():
    return MonitoringValidator.health_check()

# Metrics endpoint
@app.get("/metrics/env")
async def environment_metrics():
    return MonitoringValidator.get_metrics()

๐Ÿ“Š Built-in Validators

Security Validators

  • secret_key: Validates secret key strength and entropy
  • api_key: Validates API key format and security
  • encryption_key: Validates encryption key requirements
  • password_strength: Checks password complexity requirements

Network Validators

  • url: Validates URL format and accessibility
  • ip_address: Validates IPv4/IPv6 addresses
  • port_range: Validates port numbers
  • database_url: Validates database connection strings

Data Validators

  • email: RFC-compliant email validation
  • json: JSON format validation
  • file_path: File path existence and permissions
  • directory_path: Directory existence and permissions

Cloud Validators

  • aws_arn: AWS ARN format validation
  • gcp_project_id: Google Cloud project ID validation
  • azure_resource_id: Azure resource identifier validation

๐Ÿ”’ Security Features

Secret Detection

validator = EnvironmentValidator({
    "API_KEY": {
        "type": "str",
        "sensitive": True,
        "validators": ["secret_scanning"]
    }
})

# Automatically detects and protects sensitive values
config = validator.validate()
print(config.API_KEY)  # Shows: "***REDACTED***"

Compliance Validation

validator = EnvironmentValidator({
    "PII_DATA": {
        "type": "str",
        "compliance": ["gdpr", "hipaa"],
        "encryption": "required"
    }
})

๐Ÿ“ˆ Monitoring & Observability

Health Checks

from env_validator import HealthChecker

# Check environment health
health = HealthChecker.check()
if not health.is_healthy:
    print(f"Environment issues: {health.issues}")

Drift Detection

from env_validator import DriftDetector

# Detect configuration drift
drift = DriftDetector.detect()
if drift.has_changes:
    print(f"Configuration drift detected: {drift.changes}")

๐Ÿ—๏ธ Framework Integrations

Django

# settings.py
from env_validator.django import DjangoEnvironmentValidator

env = DjangoEnvironmentValidator.from_settings_file()
config = env.validate()

# Automatic Django settings integration
SECRET_KEY = config.SECRET_KEY
DATABASES = config.DATABASES

Flask

# app.py
from env_validator.flask import FlaskEnvironmentValidator

app = Flask(__name__)
env = FlaskEnvironmentValidator(app, {
    "SECRET_KEY": {"type": "str", "required": True},
    "DATABASE_URL": {"type": "str", "required": True},
})

FastAPI

# main.py
from env_validator.fastapi import FastAPIEnvironmentValidator

app = FastAPI()
env = FastAPIEnvironmentValidator(app, {
    "API_KEY": {"type": "str", "required": True},
    "DATABASE_URL": {"type": "str", "required": True},
})

๐Ÿš€ Performance Features

  • Lazy Loading: Validators load only when needed
  • Caching: Repeated validations are cached
  • Async Support: Non-blocking validation operations
  • Memory Efficient: Minimal memory footprint

๐Ÿ“š Documentation

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

git clone https://github.com/Sherin-SEF-AI/envvar-validator.git
cd envvar-validator
pip install -e ".[dev]"
pre-commit install
pytest

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Built with โค๏ธ by the Python community
  • Inspired by the need for better environment variable management
  • Thanks to all contributors and users

๐Ÿ“Š Project Status

  • โœ… Core validation engine
  • โœ… Advanced validators library
  • โœ… Framework integrations
  • โœ… CLI tools
  • โœ… Security features
  • โœ… Monitoring & observability
  • โœ… Documentation
  • โœ… Testing suite
  • ๐Ÿšง Community features
  • ๐Ÿšง Performance optimizations

Made with โค๏ธ by Sherin Joseph Roy

GitHub | Documentation | Issues | Discussions

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

envvar_validator-1.0.1.tar.gz (43.3 kB view details)

Uploaded Source

Built Distribution

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

envvar_validator-1.0.1-py3-none-any.whl (46.0 kB view details)

Uploaded Python 3

File details

Details for the file envvar_validator-1.0.1.tar.gz.

File metadata

  • Download URL: envvar_validator-1.0.1.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for envvar_validator-1.0.1.tar.gz
Algorithm Hash digest
SHA256 4402e7169e4890631932ecee47b0dd240a785193c4429319f2934d3ad09be9c7
MD5 2b277aab3064a4ed072d84c7718ca476
BLAKE2b-256 b59ec3563f8be61e6af30b89c545ae762dbcd09e9bcbaf4075589e04c8ee7260

See more details on using hashes here.

File details

Details for the file envvar_validator-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for envvar_validator-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b39ac4e4b8390589c5e741f9bca267d3535936bdddda5b46dc508cec9f1c9adb
MD5 0facdb2ee95f4a67870dd2902290f857
BLAKE2b-256 c3bd91320bc6cab01b280b4a8b030b982d6c9554eb989fa90a34e7d08c34352f

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