pythonish对象方案验证程序

pythonish-validator的Python项目详细描述


https://travis-ci.org/bugov/pythonish-validator.svg?branch=master

没有复杂模式的python数据验证库。 这就是编写python代码的方式:

适用于python>;=3.7

from pythonish_validator.common import Validator

validator= Validator({'name': str,
    'age': int,
    'skills': [str]})

validator.is_valid({'name': 'Georgy',
    'age': 29,
    'skills': ['Python', 'Perl', 'C']})

什么更容易?

安装

pip3 install pythonish-validator

错误消息

from pythonish_validator.common import validate

validator= validate({'name': str,
    'age': int,
    'skills': [str]}, {'name': 'Georgy',
    'age': None,
    'skills': ['Python', 'Perl', 42]})

assert validator.repr_errors()==["{'age'}->NoneType(None)",
    "{'skills'}->[2]->int(42)"]

功能

使用python类的语言:

from pythonish_validator.common import Validator


class User:
    __validation_schema__={'id': int,
        'name': str
    }validator= Validator({"users": [User]})# valid structure
validator.is_valid({"users": [{'id': 1, 'name': 'Alice'},
        {'id': 2, 'name': 'Bob'},
    ]})# invalid structure
validator.is_valid({"users": [{'id': '1', 'name': 'Alice'},
        {'id': 2},
    ]})

assert validator.repr_errors()==["{'users'}->[0]->{'id'}->str('1')",
    "{'users'}->[1]->{'name'}",
]

甚至自定义验证:

import re

from pythonish_validator.common import Validator


class EmailType:
    @staticmethod
    def __validation_schema__(data):
        if not isinstance(data, str):
            return False

        if re.match(r'\w+@\w+.\w{2,5}', data) is None:
            return False

        return True


class User:
    __validation_schema__={'id': int,
        'name': str,
        'email': EmailType,
    }validator= Validator({"users": [User]})

validator.is_valid({"users": [{'id': 1, 'name': 'Alice', 'email': 'alice@example.com'},
        {'id': 2, 'name': 'Bob', 'email': 'bob@example.com'},
    ]})

如果您发现任何错误,请写信给问题列表(https://github.com/bugov/pythonish-validator/issues)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java计时器结束得太早?   java通过行选择编辑jtable内容   java如何将数组的值传递给另一个类?   java对象。hashCode()算法   代号为1且lambda不工作的java Android本机代码   泛型Java方法签名中是否真的需要“?扩展”?   异常处理声纳问题“main”不应“抛出”任何JAVA 7   java无法使用MVEL导入静态方法   java什么是类路径容器?   java从InputStream解码字节   Eclipse重构仅限Java   java使用Qpid通过SSL与AMQP1.0代理通信   java有没有一种方法可以在Oracle中使用带有时区的时间戳作为函数输入   保存文件时运行安卓 lint的java出错   尽管添加了JScrollPane,java JList视图区域仍在增长   java计算第n个浮点   java如何在mysql中插入日期?   GWT中异步回调的java问题