Skip to content

xeBuz/Flask-Validator

Folders and files

NameName
Last commit message
Last commit date
Sep 30, 2020
Oct 27, 2020
Oct 27, 2018
Oct 12, 2020
Mar 16, 2020
Oct 27, 2018
Nov 11, 2015
Oct 12, 2020
Oct 12, 2020
Jul 14, 2017
Oct 5, 2015
Nov 23, 2015
Mar 16, 2020
Jan 2, 2020
Dec 2, 2020
Nov 10, 2015
Dec 2, 2020

Repository files navigation

Flask-Validator

PyPi status PyPI version Travis Documentation Status Requirements Status Coverage Status Code Climate Codacy Badge Code Climate technical debt PyPI - Downloads PyPI - Python Version GitHub license


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.

Installation

pip install flask-validator

Documentation

For the online documentation, follow this link

Basic usage

The most performant way to set up your validations is during 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, '[email protected]')

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
    • Validatelength
    • ValidateNaN
  • Comparision
    • ValidateLessThan
    • ValidateLessThanOrEqual
    • ValidateGreaterThan
    • ValidateGreaterThanOrEqual
  • Internet
    • ValidateEmail
    • ValidateIP
    • ValidateURL
  • Location
    • ValidateCountry
    • ValidateTimezone
    • ValidateLocale
  • Financial
    • ValidateCreditCard
    • ValidateCurrency
    • ValidateIBAN
    • ValidateBIC
  • 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, interpolate_message):
        self.useless = useless

        Validator.__init__(self, field, allow_null, throw_exception, message, interpolate_message):

    def check_value(self, value):
        return if value in ['A', 'B']

class ValidateA(Validator)
    def check_value(self, value):
        return 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