Skip to content

gitplaylist/Flask-Validator

This branch is 112 commits behind xeBuz/Flask-Validator:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

9918a3c · May 13, 2016
Mar 16, 2016
Jan 25, 2016
Mar 16, 2016
Mar 4, 2016
Nov 23, 2015
Nov 11, 2015
Nov 24, 2015
Mar 16, 2016
Oct 5, 2015
Nov 23, 2015
Mar 16, 2016
May 13, 2016
Nov 10, 2015
May 13, 2016

Repository files navigation

Flask-Validator

PyPi status PyPI version Travis Documentation Status Requirements Status Coverage Status Code Climate


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, '[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
    • 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

Packages

No packages published

Languages

  • Python 100.0%