可缓存架构描述和验证
conformit的Python项目详细描述
一个低级的声明性模式验证库。
声明架构:
fromconformity.fieldsimportDictionary,Float,Integer,List,UnicodeStringperson=Dictionary({"name":UnicodeString(),"height":Float(gte=0),"event_ids":List(Integer(gt=0)),})
检查数据是否有效:
data={"name":"Andrew","height":180.3,"event_ids":[1,"3"]}errors=person.errors(data)# Key event_ids: Index 1: Not an integer
以及包装函数以在进出过程中进行验证:
kwargs=Dictionary({"name":UnicodeString(),"score":Integer(),},optional_keys=["score"])@validate_call(kwargs,UnicodeString())defgreet(name,score=0):ifscore>10:return"So nice to meet you, {}!".format(name)else:return"Hello, {}.".format(name)
它支持基本字符串、数字、地理、时间、网络和其他字段类型,包括 易于扩展(可选通过子类化)。
错误总是conformity.error:Error的实例,每个错误都有一个message、一个code和一个 pointer:
- message是对问题的简单语言(英语)解释。
- code是一个机器可读的代码,在大多数情况下,它是INVALID(使用常量 conformity.error:ERROR_CODE_INVALID)。在Dictionary中,错误代码是MISSING(ERROR_CODE_MISSING) 对于不存在的必需密钥,UNKNOWN对于不允许的额外密钥。在Constant中,错误 对于与允许值不匹配的值,代码为UNKNOWN。在Polymorph中,错误代码是 UNKNOWN表示不存在__default__时的未知开关值。
- pointer对于大多数字段类型中的错误是None。但是,对于数据结构字段类型(List, Dictionary,SchemalessDictionary,Tuple,pointer是一个字符串,表示指向 结构中的违规值。
接口
只要遵循此接口,任何内容都可以是一致性验证程序:
- 一个errors(value)方法,为每个错误或空返回一个conformity.error:Error对象列表 如果值为clean,则为list或None。
- 返回描述字段的字典的introspect()方法。这本词典的格式必须有所不同 但是它应该反映传入构造函数的关键字参数的名称,并提供足够的 完全按原样重新创建字段的信息。为结构声明的任何子字段都应使用 他们自己的introspect()输出。字典还必须包含一个type键,该键包含 类型,但这应该使用小写和下划线,而不是类名。它还可以包含description 应该解释为字段的可读原因的键。