Library for Help Validation Control
Project description
Safe Shield
Safe Shield is a robust Python library designed to validating HTTP requests and input data.
This project is licensed under the AGPLv3 License - see the LICENSE file for details
Table of Contents
Installation
Use the package manager pip to isntall Safe Shield.
pip install safeshield
Usage
User should pass request dictionary and rules dictionary for validation data in the request.
Please see examples below:
from validator import Validator
request = {
"name": "Wunsun",
"email": "wunsun58@gmail.com",
"age": 20,
}
rules = {
"name": "required",
"email": "required|email",
"age": "required|integer|min:18",
}
validated_data = Validator(request, rules).validate() # Validated data returned
Validator().validate() returns either validated data or False
Validation Data
Rule Format
You can define multiple rules for each field as a string, tuple, or list.
- String Format
rules = {
"name": "required",
"email": "required|email",
"age": "required|integer|min:18",
}
- List Format
rules = {
"name": ["required"],
"email": ["required", "email"],
"age": ["required","integer", "min:18"],
}
- Tuple Format
rules = {
"name": ("required"),
"email": ("required", "email"),
"age": ("required","integer", "min:18"),
}
All rules can be invoked either as a class instantiation or via method calls from the Rule class (e.g., Required()) or methods (e.g., Rule.required()).
from validator.rules import Rule, Required, Email
rules = {
"name": Required(), # Single rule (no brackets needed)
"email": [Required(), Email()], # Initialization Rule Class
"age": [Rule.required(),Rule.integer(), Rule.min(18)], # Call rule from Rule Class
}
Nested Rules:
Nested data validation, use dot notation like 'user.name' to access deep fields or wildcards like 'orders.*.id' to validate all array items. The system automatically checks all nested levels and returns clear error messages pointing to exact validation failures."
rules = {
"user.name": Required(), # Top-level field
"user.contact.email": [Required(), Email()], # Nested field
"orders.*.id": Required(), # Wildcard for list items
}
Error Messages
This validator enables users to track validation failures and receive corresponding error messages.
Basic Error Validation
This demonstrates fundamental validation failures for required fields and data types:
from validator import Validator
request = {
"name": "", # Empty value
"email": "wunsun58@gmail.com",
]
rules = {
"name": "required|string"
}
validator = Validator(request, rules)
validator.validate()
"""
validator.has_errors -> True
validator.errors:
{
"name": ["The name field is required.", "The name must be a string"]
}
"""
- Output Explanation:
- validator.has_errors → True (Indicates validation failed)
- validator.errors → Returns detailed error messages:
- For the name field:
- "The name field is required." - Because the value is empty
- "The name must be a string." - Empty string fails type validation
- For the name field:
Nested Error Validation
Validates complex nested structures (objects/arrays) with precise error location:
from validator import Validator
data = {
"user": {
"name": "Alice",
"contact": {"email": "alice@example.com"} # Invalid dns email format
},
"orders": [
{"id": 1, "price": "One hundred"}, # Invalid price type
{"id": 2, "price": 200} # Valid entry
]
}
rules = {
"user.name": "required",
"user.contact.email": "email:dns", # Requires valid DNS email records
"orders.*.price": "required|integer", # Wildcard validates all array item
}
validator = Validator(request, rules)
validator.validate()
"""
validator.has_errors -> True
validator.errors:
{
"user.contact.email": ["The email must be a valid email with valid DNS records."],
"orders.0.price": ["The price must be a number"]
}
"""
- Output Explanation:
- validator.has_errors → True
- validator.errors → Pinpoints exact failures:
- user.contact.email: Fails DNS validation
- orders.0.price: First array item fails integer validation
- Note how array indices (0, 1, etc.) are automatically identified
Custom Error Message
Override default messages with user-friendly alternatives:
messages = {
"user.contact.email": "This email is invalid"
}
validator = Validator(request, rules, messages)
validator.validate()
"""
validator.has_errors -> True
validator.errors:
{
"user.contact.email": ["This email is invalid"],
"orders.0.price": ["The price must be a number"]
}
"""
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 safeshield-1.6.6.tar.gz.
File metadata
- Download URL: safeshield-1.6.6.tar.gz
- Upload date:
- Size: 39.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88baafd1a61206d863f5120e322254b927c82fbf97cbc4780c301d5984c01f74
|
|
| MD5 |
3dec864829e2f2df2d7c7188b791f1b2
|
|
| BLAKE2b-256 |
9d12798290dd592e4aaf5309ad004dceba1b1d478d5cb22ae163d187de13c444
|
File details
Details for the file safeshield-1.6.6-py3-none-any.whl.
File metadata
- Download URL: safeshield-1.6.6-py3-none-any.whl
- Upload date:
- Size: 48.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45998e1644a8f04e6b6bee4ef3fa2c43b1409d2555b45fabc5976c92e4f479e4
|
|
| MD5 |
5ba332f060e9e95b8beb636b4de5ed1e
|
|
| BLAKE2b-256 |
5bf0e792477b146dcfedc89d7be14aa3a561d45d20e2d8554925c1e7ded33824
|