Skip to main content

Python method's parameter validation library, as a pythonic decorator

Project description

Validates input parameters of a callable using this arguments:

param: arg_types:            list of types, Required argument's types  & counts in order
param: deny_match            list of string ,regex pattern, if any argument matches with the pattern, exception raises
param: requires:             list of fields to check for mandatory
param: deny:                 string ,regex pattern, if any parameter matches with the pattern, exception raises
param: deny_except:          string ,regex pattern for excluding fields from deny
param: types:                dict of key:name and value:type to check for types, if mismatch it will be raises exception
param: values:               dict of key:name and value:regex pattern to check the values, & fire exception if mismatch
param: ignore:               string ,regex pattern of parameters to filter
param: defaults:             dict of key:name and value:default_value

Exceptions:

raise: MandatoryException:           if any param in requires does not provided
raise: ArgumentException:            if arguments are invalid , short or mismatch type.
raise: DenialException:              if found param in deny list
raise: ParameterTypeException:       if parameter types invalid
raise: ParameterValueException:      if values are not in correct format

Example:

from pyvalidate import validate, ValidationException

@validate(arg_types=[int, str, str],
          deny_match=['xxx', 'tiktik'],
          requires=['phone'],
          deny='query',
          deny_except='query2',
          types={'phone':str, 'address':str, 'age':int},
          values={'phone':'^\d*$'},
          ignore='age',
          defaults={'address':'nothing'})
def add_person(serial, firstname, lastname, phone=None, address=None, age=None, **kw):
    print 'adding person "%s:%s %s:%s" with serial: %s:%s phone: %s:%s address: %s:%s age:%s:%s'                % (firstname, type(firstname),
               lastname, type(lastname),
               serial, type(serial),
               phone,
               type(phone),
               address,
               type(address),
               age,
               type(age))

def test(*args, **kwargs):
    try:
        add_person(*args, **kwargs)
    except ValidationException as ex:
        print ex.message

def main():
    test(12, "Vahid", "Mardani", phone="09122451075", address="Tehran")
    test("12", "Vahid", "Mardani", phone='+9122451075', address="Tehran")
    test("12", "Vahid", "Mardani", phone='1')
    test("12", "Vahid", "Mardani", phone='tiktik')
    test("12", "xxx", "Mardani", phone='')
    test("12", "", "Mardani",)
    test("12", "", "Mardani", phone='1', query='123')
    test("12", "", "Mardani", phone='1', query2='123')
    test("12", "", "Mardani", phone='1', age='123')

if __name__ == '__main__':
    main()

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

pyvalidate-1.3.tar.gz (3.7 kB view details)

Uploaded Source

File details

Details for the file pyvalidate-1.3.tar.gz.

File metadata

  • Download URL: pyvalidate-1.3.tar.gz
  • Upload date:
  • Size: 3.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pyvalidate-1.3.tar.gz
Algorithm Hash digest
SHA256 5b8176760ab538a65b3b0bae6a17dc8d975b0d8de98ae3f8c632e798129f1b49
MD5 3185747e24d582c7db5cc46d05f02d45
BLAKE2b-256 f106dda4f5543ca9e3fb48a691abc6c4a6ed33afd8c004f6fcacfbfab253d562

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