Skip to main content

🛡️ Beautiful Smart Input Validation for Python

Project description

🛡️ PyDefender - Beautiful Smart Input Validation

PyPI version Python 3.8+ License: MIT Downloads

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

  1. Create validator in pydefender/validators/
  2. Add tests in tests/
  3. Update __init__.py
  4. 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 colorama required
  • 🎯 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

🏆 Sponsors

Become a sponsor and help us make PyDefender even better!

❤️ Sponsor PyDefender


Made with 🔒 and ❤️ by the PyDefender Team

Validation has never been this beautiful!

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

beautiful_validator-0.0.1.tar.gz (47.9 kB view details)

Uploaded Source

Built Distribution

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

beautiful_validator-0.0.1-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

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

Hashes for beautiful_validator-0.0.1.tar.gz
Algorithm Hash digest
SHA256 8ed9edf5087be10590987c3364ab9e8ee655e0f2f39becffe59f960b9e4bb752
MD5 c455968d77c82e1cb80842b6b78d4a3e
BLAKE2b-256 943115777b073c4ff621f9e8dbcba3297274cc6f2a15f367e548bcc9c23f27aa

See more details on using hashes here.

File details

Details for the file beautiful_validator-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for beautiful_validator-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9bc1b6490f8c6c66e540f3a862a57a06233c7f69022dd09d642ac796b6e133eb
MD5 a15d65f15084a314c858d33a516236b7
BLAKE2b-256 1ecab174a8f924f1ea44f3de094f08d2b6167d608b4ecaab761fcdf4d91b4c5b

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