🚀 envvar-validator
The most comprehensive, production-ready environment variable validation library for Python
The definitive solution for Python environment variable validation that developers choose because it's genuinely the best tool available.
📦 Installation
pip install envvar-validator
🌟 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 entropyapi_key: Validates API key format and securityencryption_key: Validates encryption key requirementspassword_strength: Checks password complexity requirements
Network Validators
url: Validates URL format and accessibilityip_address: Validates IPv4/IPv6 addressesport_range: Validates port numbersdatabase_url: Validates database connection strings
Data Validators
email: RFC-compliant email validationjson: JSON format validationfile_path: File path existence and permissionsdirectory_path: Directory existence and permissions
Cloud Validators
aws_arn: AWS ARN format validationgcp_project_id: Google Cloud project ID validationazure_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
Metadata
Release files for envvar-validator 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| envvar_validator-1.0.1.tar.gz | 43.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| envvar_validator-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 89.3 kB
Release files / envvar_validator-1.0.1.tar.gz
| Download URL | envvar_validator-1.0.1.tar.gz |
|---|---|
| Size | 43.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4402e7169e4890631932ecee47b0dd240a785193c4429319f2934d3ad09be9c7
|
|
BLAKE2b-256 checksum How to use checksums |
b59ec3563f8be61e6af30b89c545ae762dbcd09e9bcbaf4075589e04c8ee7260
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|
Release files / envvar_validator-1.0.1-py3-none-any.whl
| Download URL | envvar_validator-1.0.1-py3-none-any.whl |
|---|---|
| Size | 46.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b39ac4e4b8390589c5e741f9bca267d3535936bdddda5b46dc508cec9f1c9adb
|
|
BLAKE2b-256 checksum How to use checksums |
c3bd91320bc6cab01b280b4a8b030b982d6c9554eb989fa90a34e7d08c34352f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.3
|