Skip to main content

Python方法的参数验证库,作为pythonic装饰器

项目描述

使用此参数验证可调用对象的输入参数:

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

例外:

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

例子:

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()

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyvalidate-1.3.1.tar.gz (3.9 kB 查看哈希)

已上传 source

内置分布

pyvalidate-1.3.1-py2.7.egg (6.8 kB 查看哈希

已上传 2 7