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.2.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.2-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

Details for the file beautiful_validator-0.0.2.tar.gz.

File metadata

  • Download URL: beautiful_validator-0.0.2.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.2.tar.gz
Algorithm Hash digest
SHA256 8831e3eb9441a92b6a0db85579033fd296f74a54753f5f0f05e98ff19807014b
MD5 bafb9998a04e1a243b950e547872c58a
BLAKE2b-256 dc4782135b085a372e8e0f84778d6e45c23fdbf503f5c961bce4074234de38f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for beautiful_validator-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 688cf72341c0694fa67d765104eb63baada59a2e17eec70ef305ca20fb0bcbd7
MD5 8b9a83667249da1326335e0463ada492
BLAKE2b-256 79510eef9b7628f7514d367138a8b78a9aa56e8e14549c3737a5f70972502ae6

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