架构资源
schema-resource的Python项目详细描述
schema-resource包是一个用于加载的简单库 jsonschema架构使用pkg_resources。这意味着 使用schema-resource包的python包可以绑定 将API或用户配置作为单独文件进行验证的架构 与包源。此外,这些模式可以引用 包中的其他架构文件。
简单用法
使用schema-resource的最简单方法是理解 资源uri。资源uri是方案为“res”的uri。这个 “网络位置”–在uri中“/”后面出现的部分–是 包名,由pkg_resources理解。路径是 然后相对于包的根目录进行解释。为了 例如,如果包“spam”具有名为“schema.yaml”的架构,则 资源uri应该是“res://spam/schema.yaml”。然后,此架构可以 使用schema_res.load_schema()加载,这将占用资源 uri作为它的第一个参数;结果将是一个符合 文档中的jsonschema.IValidator接口 jsonschema文档。
当然,可以通过使用 jsonschema和pkg_resources直接;但是, schema-resource创建具有特殊 jsonschema.RefResolver能够理解这些资源uri;这个 增强允许一个模式引用另一个模式或另一个模式的一部分, 直接使用资源架构。
类属性
通常,类需要使用特定的模式来验证 输入,通常来自api或配置文件。这可能是 通过使用schema_res.SchemaDescriptor简化。这个 类实现python“描述符”协议,这意味着 指定给类属性,引用 属性将导致schema_res.SchemaDescriptor的方法 打电话。该方法实现按需加载模式 资源,如果需要,从类的 __module__属性。例如,假设Spam 下面的类需要验证馈送到类方法的数据:
class Spam(object): schema = schema_res.SchemaDescriptor("spam.yaml") @classmethod def from_data(cls, data): cls.schema.validate(data) return cls(**data) ...
此类首先根据从 与包源捆绑在一起的“spam.yaml”文件,加载架构 第一次调用方法时。(在 jsonschema.IValidator.validate()方法引发 jsonschema.ValidationError异常,如果data不匹配 模式的要求。)
验证架构
对于包的测试套件来说,验证 它捆绑的架构是有效的。这可以通过简单地使用 schema_res.load_schema()函数,为每个资源调用它 uri并在包的测试套件中传递validate=True。 不过,还有一个简单的助手:schema_res.validate()takes 一个或多个资源uri并调用schema_res.load_schema()on 每个,传递validate=True。这意味着整个测试可以 作为单个函数调用编写,如下所示:
class TestSchemas(object): def test_valid(self): schema_res.validate( "res://spam/schema1.yaml", "res://spam/schema2.yaml", "res://spam/schema3.yaml", )
架构格式
到目前为止的所有示例中,架构文件名都有“.yaml” 分机。不需要使用这个扩展,甚至 对于yaml格式的文件:json是yaml的一个子集,因此 架构文件可以用常规json编写。然而,通过使用山药 语法分析器加载模式文件,它们可以用yaml格式表示, 这个程序员发现它比严格的 json语法。