🛡️ Beautiful Smart Input Validation for Python
Project description
🛡️ PyDefender - Beautiful Smart Input Validation
The most beautiful and intelligent input validation library for Python ✨
Stop writing boring validation code! PyDefender makes input validation beautiful, smart, and effortless.
🚀 Quick Start
Installation
pip install pydefender
Basic Usage
import pydefender
# ❌ Before: Ugly, repetitive validation
def set_age(age):
if not isinstance(age, (int, str)):
raise ValueError("Age must be a number")
try:
age = int(age)
except ValueError:
raise ValueError("Age must be a valid number")
if age < 0:
raise ValueError("Age cannot be negative")
if age > 150:
raise ValueError("Age cannot be greater than 150")
return f"Age: {age}"
# ✅ After: Beautiful PyDefender
@pydefender.age()
def set_age(age):
return f"Age: {age}"
# Works magically with ANY input!
print(set_age("25")) # → "Age: 25" ✨
print(set_age(30.5)) # → "Age: 30" (auto-rounded)
# set_age("200") # → Beautiful error with suggestions
✨ Why PyDefender?
🎨 Beautiful Decorators
@pydefender.number(min_value=0, max_value=100)
def set_score(score):
return f"Score: {score}/100"
@pydefender.string(min_length=2, max_length=50, auto_capitalize=True)
def set_name(name):
return f"Hello, {name}!"
@pydefender.price()
def set_price(price):
return f"Price: ${price:.2f}"
🧠 Smart Auto-Correction
@pydefender.number(extract_from_text=True, round_decimals=2)
def parse_price(text):
return f"Price: ${text}"
print(parse_price("Price is $19.999")) # → "Price: $20.00"
print(parse_price("Cost: 15.4321")) # → "Price: $15.43"
🌍 Multi-Language Support
# English
@pydefender.configure(language="en")
@pydefender.age()
def set_age_en(age): return f"Age: {age}"
# Russian (with Cyrillic decorators!)
@pydefender.configure(language="ru")
@pydefender.возраст() # Russian alias!
def установить_возраст(возраст): return f"Возраст: {возраст}"
🛠️ Easy Configuration
# For beginners - friendly and helpful
pydefender.setup_for_beginners()
# For professionals - clean and fast
pydefender.setup_for_professionals()
# For production - optimized performance
pydefender.setup_for_production()
🎯 Available Validators
🔢 Numbers
@pydefender.number() # General number validation
@pydefender.integer() # Integer numbers only
@pydefender.positive_number() # Positive numbers (≥0)
@pydefender.percentage() # 0-100% validation
@pydefender.age() # Age validation (0-150)
@pydefender.score() # Score validation (0-10)
@pydefender.price() # Price validation (≥0, 2 decimals)
📝 Strings
@pydefender.string() # General string validation
@pydefender.name() # Person name validation
@pydefender.username() # Username validation (no spaces, special rules)
@pydefender.comment() # Comment validation (max length, etc.)
🎮 Interactive Demo
import pydefender
# Run interactive demo
pydefender.demo()
# Or get help
pydefender.show_help()
🎪 Examples Gallery
Smart Number Extraction
@pydefender.number(extract_from_text=True, min_value=0, max_value=150)
def extract_age(text):
return f"Age: {text}"
print(extract_age("I am 25 years old")) # → "Age: 25"
print(extract_age("Age: 30")) # → "Age: 30"
print(extract_age("no numbers here")) # → Error with suggestions
Auto-Formatting Names
@pydefender.name() # Auto-capitalizes and trims
def welcome_user(name):
return f"Welcome, {name}!"
print(welcome_user(" john doe ")) # → "Welcome, John Doe!"
print(welcome_user("MARY SMITH")) # → "Welcome, Mary Smith!"
Advanced Number Validation
@pydefender.number(
min_value=0,
max_value=1000,
multiple_of=5, # Must be divisible by 5
round_decimals=2, # Round to 2 decimal places
suggest_closest=True # Suggest nearest valid values
)
def set_price_steps(price):
return f"Price: ${price}"
print(set_price_steps("47.3333")) # → "Price: $45.00" (rounded to nearest multiple of 5)
Form Validation
from pydefender.decorators import form_validator
@form_validator(
name=pydefender.name(),
age=pydefender.age(),
email=pydefender.email() # Coming in v0.1.0!
)
def register_user(name, age, email):
return f"User {name} ({age}) registered with {email}"
📊 Error Handling
PyDefender provides beautiful, helpful error messages:
@pydefender.age()
def set_age(age):
return f"Age: {age}"
try:
set_age("200")
except pydefender.ValidationError as e:
print(e)
# Output:
# ❌ Number too large (maximum: 150)
# Received: 200
# 💡 Suggestions:
# • Enter a number from 0 to 150
# • Nearest valid: 150
⚙️ Configuration
Global Configuration
pydefender.configure(
language="ru", # Russian interface
colors=True, # Colored output
emojis=True, # Use emojis
auto_retry=True, # Auto-retry on errors
max_attempts=3, # Maximum retry attempts
suggest_corrections=True # Show helpful suggestions
)
Per-Validator Configuration
@pydefender.number(
min_value=0,
max_value=100,
auto_retry=False, # Disable retries for this validator
error_message="Custom error message",
success_message="Great! Value: {value}"
)
def custom_validator(value):
return value
🏗️ Roadmap
Version 0.1.0 (Coming Soon)
- 📧 Email validation
- 📱 Phone number validation
- 📅 Date/time validation
- 🌐 URL validation
Version 0.2.0
- 📄 File validation
- 🔐 Password strength validation
- 💳 Credit card validation
- 🏠 Address validation
Version 0.3.0
- 🧠 AI-powered validation
- 🔌 Framework integrations (Django, Flask, FastAPI)
- 📊 Analytics and monitoring
- 🎨 Custom UI themes
🤝 Contributing
We love contributions! PyDefender is designed to be easily extensible.
# Clone the repo
git clone https://github.com/pydefender/pydefender.git
cd pydefender
# Install in development mode
pip install -e ".[dev]"
# Run tests
python examples/quick_test.py
# Run the interactive demo
python -c "import pydefender; pydefender.demo()"
Adding New Validators
- Create validator in
pydefender/validators/ - Add tests in
tests/ - Update
__init__.py - Add examples to
examples/
📈 Performance
PyDefender is optimized for performance:
- ⚡ Lazy loading - Validators loaded only when needed
- 🏎️ Caching - Validation results cached automatically
- 📦 Minimal dependencies - Only
coloramarequired - 🎯 Efficient - Optimized for common use cases
🧪 Testing
# Quick test
python examples/quick_test.py
# Full test suite (coming soon)
pytest tests/
# Performance benchmarks
python tools/benchmark.py
📄 License
MIT License - see LICENSE file.
🌟 Star History
If PyDefender helps you, please give it a star! ⭐
💬 Support
- 📧 Email: team@pydefender.dev
- 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📖 Docs: pydefender.dev (coming soon)
🏆 Sponsors
Become a sponsor and help us make PyDefender even better!
Made with 🔒 and ❤️ by the PyDefender Team
Validation has never been this beautiful! ✨
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 beautiful_validator-0.0.1.tar.gz.
File metadata
- Download URL: beautiful_validator-0.0.1.tar.gz
- Upload date:
- Size: 47.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ed9edf5087be10590987c3364ab9e8ee655e0f2f39becffe59f960b9e4bb752
|
|
| MD5 |
c455968d77c82e1cb80842b6b78d4a3e
|
|
| BLAKE2b-256 |
943115777b073c4ff621f9e8dbcba3297274cc6f2a15f367e548bcc9c23f27aa
|
File details
Details for the file beautiful_validator-0.0.1-py3-none-any.whl.
File metadata
- Download URL: beautiful_validator-0.0.1-py3-none-any.whl
- Upload date:
- Size: 65.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9bc1b6490f8c6c66e540f3a862a57a06233c7f69022dd09d642ac796b6e133eb
|
|
| MD5 |
a15d65f15084a314c858d33a516236b7
|
|
| BLAKE2b-256 |
1ecab174a8f924f1ea44f3de094f08d2b6167d608b4ecaab761fcdf4d91b4c5b
|