架构资源

schema-resource的Python项目详细描述


https://travis-ci.org/klmitch/schema-resource.svg?branch=master

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文档。

当然,可以通过使用 jsonschemapkg_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语法。

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

推荐PyPI第三方库


热门话题
java我可以扩展一个@Component并创建另一个@Component类,一次只能使用一个吗?   dice Java:使用静态方法在Main之外的方法中调用对象   Java中的泛型类型推理(#la C#)   java如何使用进程和PID过滤正确捕获logcat?   java Hibernate:无法获取检索到的关联列表   java Set滑动面板布局水平滚动已禁用   java中128位上的ipv6按位操作   java图形二叉搜索树节点间距   JavaSpring数据,MySQL,连接在8小时不活动后终止   java如何更改Android上必需的Facebook权限字段   java如何从未映射类返回hibernate中受影响的行数   java播放Http。上下文实现   SplashScreen中的java 安卓异常   java Android为什么在onCreate中显示文本   使用JavaPlot的java Spectrogram不起作用   java将SecurityContextToken设置为SOAP头