🛡️ univalidator
A flexible, extensible, and type-safe Python validation framework designed to validate data with ease.
Currently supports email validation (via regex and MX records) and composite validators for running multiple checks.
✨ Features
- Abstract Validator Interface — define your own validators easily.
- Regex-based Validation — for any string patterns.
- Email Format Validation — RFC-compliant pattern check.
- MX Record Validation — verifies if an email domain can receive emails.
- Composite Validation — run multiple validators in sequence.
- Type Safe — written with modern Python type hints.
📦 Installation
-
By using uv:
uv add univalidator
-
By using pip:
pip install univalidator
📚 API Reference
1️ BaseValidator[T]
Abstract base for all validators.
Custom validators must implement the validate(data: T) -> bool method.
2️ RegexValidator[T]
Validates data against a regular expression.
from univalidator.validators import RegexValidator
validator = RegexValidator[str](r"^\d{4}-\d{2}-\d{2}$") # YYYY-MM-DD format
validator.validate("2025-08-15") # True
validator.validate("15-08-2025") # False
3️ RegexEmailValidator[T]
Validates email format using a regex pattern. Uses a default pattern, but you can pass your own.
from univalidator.validators import RegexEmailValidator
validator = RegexEmailValidator[str]()
validator.validate("user@example.com") # True
validator.validate("invalid-email") # False
4️ MXEmailRecordValidator[T]
Checks if an email’s domain has MX DNS records.
from univalidator.validators import MXEmailRecordValidator
validator = MXEmailRecordValidator[str]()
validator.validate("user@gmail.com") # True
validator.validate("user@no-such-domain.com") # False
Restrict to specific domains:
validator = MXEmailRecordValidator[str](allowed_domains=["example.com", "gmail.com"])
5️ CompositeValidator[T]
Runs multiple validators in sequence. All validators must pass for the data to be valid.
from univalidator.composites import CompositeValidator
from univalidator.validators import RegexEmailValidator, MXEmailRecordValidator
validator = CompositeValidator[str]([
RegexEmailValidator(),
MXEmailRecordValidator()
])
validator.validate("user@gmail.com") # True
🧪 Testing
uv add pytest
uv run pytest tests
🌟 Example: Full Email Validation
from univalidator.composites import CompositeValidator
from univalidator.validators import RegexEmailValidator, MXEmailRecordValidator
validator = CompositeValidator[str]([
RegexEmailValidator(),
MXEmailRecordValidator()
])
email = "test@gmail.com"
if validator.validate(email):
print("Valid email with active domain!")
else:
print("Invalid email.")
🛠️ Planned Features
- 🔒 Add more Validators
🤝 Contributing
Contributions are welcome! Please open an issue or PR for any improvements.
📜 License
MIT License — See LICENSE.
👤 Author
For questions or assistance, contact Shailesh at shaileshpandit141@gmail.com.
Metadata
Release files for univalidator 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| univalidator-2.0.0.tar.gz | 12.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| univalidator-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.0 kB
Release files / univalidator-2.0.0.tar.gz
| Download URL | univalidator-2.0.0.tar.gz |
|---|---|
| Size | 12.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c9c64b86cae56139c24ce324486f84f2353c8f1fe4a47ceb0ee16fa29570b961
|
|
BLAKE2b-256 checksum How to use checksums |
b7c50bd51baf4f44d964dc4de82f5b165428cc7980826a8c42d39ce3e2c63ac6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / univalidator-2.0.0-py3-none-any.whl
| Download URL | univalidator-2.0.0-py3-none-any.whl |
|---|---|
| Size | 8.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91bd53e1594107f6ad840bcc15a0e3a5c02d05307155319672529232a4a603a2
|
|
BLAKE2b-256 checksum How to use checksums |
0b0a822ec344c7fab37709e099c786fd066e9dacca884c0930c0dd4a9742c5bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|