Research
Security News
Malicious npm Package Targets Solana Developers and Hijacks Funds
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Validator is a Python library for dealing with request validating.
Use the package manager pip to install Validator.
pip install validator
User should pass request dictionary and rules dictionary for validating data in the request.
Please see examples below:
from validator import validate
request = {"name": "John Doe",
"age": 33,
"mail": "john_doe@gmail.com"}
rules = {"name": "required",
"age": "integer|min:18",
"mail": "required|mail"}
result = validate(request, rules) # True
validate()
returns either True or False.
Another option is to use Validator
class
from validator import Validator
request = {...}
rules = {...}
val = Validator(request, rules)
result = val.validate() # True
Validator allows user to have a look at failed validations and passed validations. validated_data
is extremly useful when request contains data that is not needed for initialization of model, you can get rid of them and validate at the same time. See examples below:
Validated Data
from validator import validate
request = {"first_name": "John",
"last_name": "Doe",
"age": 33,
"mail": "johndoe@gmail.com",
"_token": "WpH0UPfy0AXzMtK2UWtJ",
"_cookie_data": "e9Uixp8hzUySy6bw3MuZ",
"_session_id": "ZB7q7uIVdWBKgSCSSWAa"}
rule = {"first_name": "required",
"last_name": "required",
"age": "required|min:18",
"mail": "required|mail"}
result, validated_data, _ = validate(request, rule, return_info=True)
"""
result = True
validated_data = {"first_name": "John",
"last_name": "Doe",
"age": 33,
"mail": "johndoe@gmail.com"}
"""
Error Messages
from validator import validate
request = {"name": "",
"mail": "john_doe"}
rule = {"name": "required",
"mail": "mail"}
result, _, errors = validate(request, rule, return_info=True)
"""
result = False
errors = {"name": {"Required': "Field was empty"},
"mail": {"Mail': "Expected a Mail, Got: john_doe"}}
"""
Or you can use Validator
class for error messages as well as for validated data.
val = Validator(request, rules)
result = val.validate()
validated_data = val.get_validated_data()
errors = val.get_errors()
Validator comes with validate_many()
function, which validates multiple requests. Function takes list of requests and one rule. This rule is checked for all the requests. If one or more requests fail validation function returns False, otherwise (if all pass) True. For more details see example below:
Validation Passes:
from validator import validate_many
requests = [{"name": "John"},
{"name": "Rob"},
{"name": "Tom"},
{"name": "Greg"}]
rule = {"name": "required|min:3"}
result = validate_many(requests, rule) # True
We can also have a look at failed validations and error messages. validate_many()
takes third argument as boolean, indicating return of error messages.
Validation Fails:
from validator import validate_many
requests = [{"name": "John"},
{"name": ""},
{"name": "Yo"},
{"name": "Greg"}]
rule = {"name": "required|min:3"}
result, errors = validate_many(requests, rule, return_info=True)
"""
result = False
errors = [{},
{"name": {"Min": "Expected Maximum: 3, Got: 0", "Required": "Field was empty"}},
{"name": {"Min": "Expected Maximum: 3, Got: 2"}},
{}]
"""
Validator Rules can be used in different ways. Please see some examples below:
rule = {"name": "required",
"age": "integer|min:18",
"mail": "required|mail"}
rule = {"name": ["required"],
"age": ["integer", "min:18"],
"mail": ["required", "mail"]}
from validator import rules as R
rules = {"name": [R.Required()],
"age": [R.Integer(), R.Min(18)],
"mail": [R.Requried(), R.Mail()]}
from validator import rules as R
rules = {"name": R.Required(), # no need for Array Brackets if one rule
"age": [R.Integer, R.Min(18)],
"mail": [R.Requried, R.Mail]} # no need for class initialization with brakcets ()
# if no arguments are passed to rule
Rules can affect each other. Let's take a look at Size
rule. It takes 1 argument and checks if data is equal to given value (example: 'size:10'
).
request = {"age" : "18"}
rule = {"age" : "size:18"}
validate(request, rule)
"""
result = False
errors = {"age": {"Size": "Expected Size:18, Got:2"}}
"""
request = {"age" : "18"}
rule = {"age" : "integer|size:18"}
validate(request, rule) # True
For more details please view Size Rule
We give users ability to advance and use their own checkers. Write function and use is as a rule. See examples below:
from validator import validate
def func_age(x):
return x >= 18
req = {"age": 30}
rules = {"age": func_age}
validate(req, rules)
from validator import validate
req = {"age": 30}
rules = {"age": lambda x: x >= 18}
validate(req, rules)
from validator import validate
class checker:
def __init__(self):
pass
def __call__(self, x):
return x >= 456
req = {"age": 30}
rules = {"age": checker()}
validate(req, rules)
from validator import validate
from validator.rules import Rule
class AgeRule(Rule):
def __init__(self, min):
Rule.__init__(self)
self.min = min
def check(self, arg):
return self.min <= arg
req = {"age": 30}
rules = {"age": AgeRule(18)}
validate(req, rules)
We have written some examples for you to get started easier. Please view Examples folder, where you can find validator usages with frameworks like Flask, Django and etc.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please see CONTRIBUTING.md before making PR :)
FAQs
Python Validator
We found that validator demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.