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 JMeter未正确解码base64将导致生成空白PDF   java我如何添加javax。媒体jai.*项目中的包?   java是我的公式错了还是有任何一行代码使它错了?   java Android:后退按钮跳过webView   使用Java CDI Weld重新连接到对话   带有表粘贴的java网格web组件   java在JTable中编辑时防止重复值   java Jersey获取摘要或基本HTTP身份验证用户和密码   java如何检查Android EditText整数值?   html如何使用Java从网站中提取动态字符串/单词   java如何解决使用Boilerpipe时的ConnectException错误?   java获取hadoop名称节点格式   Java中占位符解析器的解析   JavaSpringWebhook端点获取整个主体以及pojo   Java:将颜色字符串值转换为十六进制值   捕捉光标时受帧率影响的java LibGDX鼠标灵敏度   java Spring MVC实现大型应用程序DTOs/ViewModels的最佳实践?   基于特性的java模块化安卓应用   java Spring控制器请求参数作为来自jQuery get()的POJO