验证器

PyValidator的Python项目详细描述


schema是用于验证python数据结构的库,例如 从配置文件、窗体、外部服务或命令行获取 解析,从json/yaml(或其他)转换为python数据类型。

pyvalidator是python模式的(几乎)替换, 为了更好地处理错误,几乎是从头开始写的。

注意:这里的大多数自述文件是对原始python模式的自述文件的一个小编辑

示例(来自python模式)

下面是一个快速的示例,可以让您感受到schema,验证 包含个人信息的条目:

>>>frompyvalidatorimportValidator,And,Use,Optional>>>validator=Validator([{'name':And(str,len),...'age':And(Use(int),lambdan:18<=n<=99),...Optional('sex'):And(str,Use(str.lower),...lambdas:sin('male','female'))}])>>>data=[{'name':'Sue','age':'28','sex':'FEMALE'},...{'name':'Sam','age':'42'},...{'name':'Sacha','age':'20','sex':'Male'}]>>>validated=validator.validate(data)>>>assertvalidated==[{'name':'Sue','age':28,'sex':'female'},...{'name':'Sam','age':42},...{'name':'Sacha','age':20,'sex':'male'}]

如果数据有效,Validator(some schema).validate将返回已验证的数据 (可选择使用Use调用进行转换,请参见下文)。

**注意:由于pyvalidator是python模式的替换,因此,
有关更多用法示例,请参见https://github.com/keleshev/schema.*

pyvalidator与python模式的比较

python schema发出schema error,该schemaerror最多可包含1种错误, 而且它的输出对于处理错误的编程也不是很有帮助。

另一方面,pyvalidator发出一个“errorbucket”来显示所有的错误, 以及供程序使用的完全可遍历的结构。

长时间的讨论已经足够了,下面是python模式的演示:

>>>fromschemaimportSchema,Optional>>>sc=Schema({...'wow':'so schema',...'such':'validation',...'string!!!':str,...Optional('so int'):int})>>>try:...sc.validate({'so int':'NOT int'})...exceptExceptionase:...error=e>>>errorSchemaError("'NOT int' should be instance of <type 'int'>",)>>>dir(error)[...,'args','autos','code','errors','message']>>>error.args[None]>>>e.autos["'NOT int' should be instance of <type 'int'>"]#string...

PyValidator的输出演示:

>>>frompyvalidatorimportValidator,Optional>>>sc=Validator({...'wow':'so schema',...'such':'validation',...'string!!!':str,...Optional('so int'):int})>>>try:...sc.validate({'so int':'NOT int'})...exceptExceptionase:...error=e>>>errorGenericErrors:{'wrong_type':{'so int':[WrongType:gotstrinsteadofint]},'missing_key':{'such':[MissingKey:such=>validation],'wow':[MissingKey:wow=>soschema],'string!!!':[MissingKey:string!!!=><type'str'>]}}CustomErrors:[]>>>error.errors# note: all errors are preserved.{'wrong_type':{'so int':[WrongType:gotstrinsteadofint]},'missing_key':{'such':[MissingKey:such=>validation],'wow':[MissingKey:wow=>soschema],'string!!!':[MissingKey:string!!!=><type'str'>]}}>>>error.error_count4>>>error.errors['missing_key']#needs formatting...{'such':[MissingKey:such=>validation],'wow':[MissingKey:wow=>soschema],'string!!!':[MissingKey:string!!!=><type'str'>]}>>>type(error.errors['missing_key']['such'])<class'pyvalidator._errorbucketnode._ErrorBucketNode'>>>># Note: There's room for improvement here...>>>error.errors['missing_key']['such'].errors[0]MissingKey:such=>validation>>>dir(error.errors['missing_key']['such'].errors[0])[...,'args','data','error_name','key','message']>>>error.errors['missing_key']['such'].errors[0].key'such'>>>error.errors['missing_key']['such'].errors[0].error_name'missing_key'>>>error.errors['missing_key']['such'].errors[0].data'validation'

错误bucketnode而不是dict/list的基本原理

**欢迎对错误bucketnode提出任何建议:)
(\u errorbucketnode本身有点难看)**

安装

使用pip或简易安装:

pip install pyvalidator
  • pyvalidator使用python 2.6、2.7和3.x进行测试
  • pyvalitator跟在semantic versioning后面。

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

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧