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
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
- ๐ Full Documentation
- ๐ Quick Start Guide
- ๐ง API Reference
- ๐๏ธ Framework Integrations
- ๐ Security Guide
๐ค 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4402e7169e4890631932ecee47b0dd240a785193c4429319f2934d3ad09be9c7
|
|
| MD5 |
2b277aab3064a4ed072d84c7718ca476
|
|
| BLAKE2b-256 |
b59ec3563f8be61e6af30b89c545ae762dbcd09e9bcbaf4075589e04c8ee7260
|
File details
Details for the file envvar_validator-1.0.1-py3-none-any.whl.
File metadata
- Download URL: envvar_validator-1.0.1-py3-none-any.whl
- Upload date:
- Size: 46.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b39ac4e4b8390589c5e741f9bca267d3535936bdddda5b46dc508cec9f1c9adb
|
|
| MD5 |
0facdb2ee95f4a67870dd2902290f857
|
|
| BLAKE2b-256 |
c3bd91320bc6cab01b280b4a8b030b982d6c9554eb989fa90a34e7d08c34352f
|