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.6.1.tar.gz (39.5 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.6.1-py3-none-any.whl (48.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for safeshield-1.6.1.tar.gz
Algorithm Hash digest
SHA256 f57f5f44813d430c3282620ab9a0f340fdb072bc98d4ea14088b44cc4511bb3f
MD5 66f081103d08acabc9dce5a7016aa3a7
BLAKE2b-256 abc2686018d70cc3514aeefccd1db00485f371a631dab19e12bfb7cc5c3deb19

See more details on using hashes here.

File details

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

File metadata

  • Download URL: safeshield-1.6.1-py3-none-any.whl
  • Upload date:
  • Size: 48.0 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.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 10d025ae906874cd0a1386e9c3da1f5191026b3754c594f006fa079b259a597c
MD5 4a6d34748e89eb82e9fe89f8993faff8
BLAKE2b-256 81a5663fc0f6286e751c636b2235db9424f1f508ebff389ee048cda36485612e

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