Skip to main content

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

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

safeshield-1.5.4.tar.gz (39.3 kB view details)

Uploaded Source

Built Distribution

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

safeshield-1.5.4-py3-none-any.whl (47.8 kB view details)

Uploaded Python 3

File details

Details for the file safeshield-1.5.4.tar.gz.

File metadata

  • Download URL: safeshield-1.5.4.tar.gz
  • Upload date:
  • Size: 39.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.6

File hashes

Hashes for safeshield-1.5.4.tar.gz
Algorithm Hash digest
SHA256 7279570322a0d3f178fec8dfbd3fb085c13cdd34d7a9221352cf5246400ca498
MD5 7099dfbbf36166ab5f09da0444358f67
BLAKE2b-256 05bde8faaa9e4b88fc52a510718fd9fb2a9df0d52791b330aa62769ebc1568b5

See more details on using hashes here.

File details

Details for the file safeshield-1.5.4-py3-none-any.whl.

File metadata

  • Download URL: safeshield-1.5.4-py3-none-any.whl
  • Upload date:
  • Size: 47.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.6

File hashes

Hashes for safeshield-1.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 5139f38e057aec5670c4dc1e0bd97986b5eef1dc3a44da3d3b685f7f5bb92e10
MD5 6ddc3ac2339b100bfaacecd068270cc7
BLAKE2b-256 f9db838feccf39eefed836a23cb8d71c6a28e6873e70fa6d908463b679e467f3

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