Data validator for Flask using SQL-Alchemy, working at Model component with events
Project description
Description
Data validator for Flask using SQL-Alchemy, working at Model component with events, preventing invalid data in the columns. The extension works with event listeners from SQLAlchemy.
Instalation
pip install flask-validator
Documentation
For the online documentation, follow this link
Basic usage
The most performant way to set up your validations is uring the SQLAlchemy special directive_ __declare_last__, it occurs after mappings are assumed to be completed and the ‘configure’ step has finished.
from flask_validator import ValidateInteger, ValidateString, ValidateEmail
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
code = db.Column(db.Integer())
email = db.Column(db.String(125))
def __init__(self, string, integer):
self.string = string
self.integer = integer
@classmethod
def __declare_last__(cls):
ValidateString(User.name)
ValidateInteger(User.code)
ValidateEmail(User.email)
user = User('Arthur Dent', 42, 'arthur@babelfish.org')
user.name = 666
print user.name
# 'Arthur Dent'
user.name = 'Zaphod Beeblebrox'
print user.name
# 'Zaphod Beeblebrox'
Exceptions
Every Constraint has a parameter to throw an exception everytime the validation fails, for example:
ValidateNumeric(Table.field, False, True, "Message")
The third parameter enables this feature and throw a ValidateError exception, otherwise it will fails silently.
Message Exception
The fourth parameter allow a custom message exception, with a few variables available
old_value: value previous to the modification
new_value: value provided (with the error)
key: the column name
field: object.column
Available Constraints
Types
ValidateInteger
ValidateNumeric
ValidateString
ValidateBoolean
Numeric
ValidateLenght
Comparision
ValidateLessThan
ValidateLessThanOrEqual
ValidateGreaterThan
ValidateGreaterThanOrEqual
Internet
ValidateEmail
ValidateIP
ValidateURL
Location
ValidateCountry
ValidateTimezone
ValidateLocale
Finantial
ValidateCreditCard
ValidateCurrency
ValidateIBAN
Others
ValidateUUID
ValidateISBN
ValidateRegex
ValidateRange
Custom Validators
You will be able to create customs validator implementing the class Validator.
You must define your own method check_value() and if you are receiving any argument, you also must call the parent __init__()
from flask_validator import Validator
class ValidateAorB(Validator)
def __init__(self, field, useless, allow_null=True, throw_exception=False, message=None):
self.useless = useless
Validator.__init__(self, field, allow_null, throw_exception, message):
def check_value(self, value):
retunr if value in ['A', 'B']
class ValidateA(Validator)
def check_value(self, value):
retunr if value == 'A'
Pause the validation
The extension has two methods to stop and restart the listener.
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
code = db.Column(db.Integer())
email = db.Column(db.String(125))
def __init__(self, string, integer):
self.string = string
self.integer = integer
# Initialize the validator
validate = ValidateString(User.name)
# Do something validated
# ...
validate.stop()
# Assign values without being validated
# ...
validate.start()
# Re-enabled the listener
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.