跳转到主要内容

LinkML Validator

项目描述

LinkML Validator

Run tests PyPI

LinkML Validator是一个库,用于对符合给定LinkML架构的数据对象执行验证。

验证器使用LinkML架构YAML进行初始化,并设计为允许灵活的验证,其中每种类型的验证都由插件执行。

例如,JSONSchema验证由JsonSchemaValidationPlugin执行。

动机

LinkML Validator的构建有以下目标

  • 验证器应该以可解析的验证消息响应
  • 即使列表中的一个对象验证失败,验证器也不应中断验证过程
  • 验证器应提供对对象执行多种类型验证的能力

安装

python setup.py install

要安装开发依赖项(如pytestmkdocs等)

pip install -e ".[dev]"

通过CLI运行LinkML Validator

要运行LinkML Validator,

linkml-validator --inputs <INPUT JSON> \
    --schema <SCHEMA YAML> \
    --output <OUTPUT>

您可以传递文件路径或指向LinkML架构YAML的URL。

以对象字典的形式输入数据

输入JSON可以是一个以对象类型为键的对象字典。

{
    "<OBJECT_TYPE>": [
        {

        }
    ]
}

其中<OBJECT_TYPE>是schema YAML中定义的类的Python表示。

例如,考虑examples/example_data1.json

{
    "NamedThing": [
        {
            "id": "obj1",
            "name": "Object 1",
            "type": "X"
        },
        {
            "id": "obj2",
            "name": "Object 2",
            "type": "Y"
        }
    ]
}

在上面的例子中,NamedThingtarget_class,它是examples/example_schema.yaml中定义的类named thing的Python表示。

您可以使用以下命令在上述数据上运行验证器

linkml-validator --inputs examples/example_data1.json \
    --schema examples/example_schema.yaml \
    --output examples/example_data1_validation_report.json

以对象数组的形式输入数据

输入的JSON也可以是一个对象数组

[
    {},
    {}
]

在这种情况下,还必须通过CLI中的--target-class参数指定对象类型。

例如,考虑examples/example_data2.json

[
    {
        "id": "obj1",
        "name": "Object 1",
        "type": "X"
    },
    {
        "id": "obj2",
        "name": "Object 2",
        "type": "Y"
    }
]

您可以使用以下命令在上述数据上运行验证器

linkml-validator --inputs examples/example_data2.json \
    --schema examples/example_schema.yaml \
    --output examples/example_data2_validation_report.json \
    --target-class NamedThing

运行所选插件

要仅运行部分插件作为验证的一部分,

linkml-validator --inputs data.json \
    --schema schema.yaml \
    --output validation_results.json \
    --plugins JsonSchemaValidationPlugin

要执行严格验证,

linkml-validator --inputs data.json \
    --schema schema.yaml \
    --output validation_results.json \
    --plugins JsonSchemaValidationPlugin \
    --strict

在正常(默认)模式下,验证器将在给定对象上运行所有引用插件中定义的所有检查。

在严格模式下,如果任何一个插件报告验证失败,验证器将停止对对象的验证。

使用验证器(通过CLI)运行您自己的插件

要运行您的自定义插件作为验证的一部分,

linkml-validator --inputs data.json \
    --schema schema.yaml \
    --output validation_results.json \
    --plugins JsonSchemaValidationPlugin \
    --plugins <CUSTOM_PLUGIN_CLASS>

其中<CUSTOM_PLUGIN_CLASS>是自定义插件类的引用。

注意:自定义插件类必须是linkml_validator.plugins.base.BasePlugin的子类,并且必须实现BasePlugin类中定义的所有方法。

将LinkML验证器作为模块使用

您可以直接在您的代码库中使用linkml_validator.validator.Validator类来对您正在处理的对象执行验证。

以下代码片段提供了一种快速实例化验证器类并在对象上执行验证的方法

from linkml_validator.validator import Validator

data_obj = {
    "id": "obj1",
    "name": "Object 1",
    "type": "X"
}
validator = Validator(schema="examples/example_schema.yaml")
validator.validate(obj=data_obj, target_class="NamedThing")

注意:上面的代码假设在examples/example_schema.yaml中定义了一个名为thing的类,并且NamedThing是其Python表示形式。

您还可以提供自己的自定义插件类与验证器一起运行,

from linkml_validator.validator import Validator
from linkml_validator.plugins.base import BasePlugin
from linkml_validator.models import ValidationResult

class MyCustomPlugin(BasePlugin):
    NAME = "MyCustomPlugin"

    def __init__(self, schema: str, **kwargs) -> None:
        super().__init__(schema)

    def process(self, obj: dict, **kwargs) -> ValidationResult:
        # Add your custom logic for processing and validating the incoming object
        valid = False
        print("In MyCustomPlugin.process method")
        result = ValidationResult(
            plugin_name=self.NAME,
            valid=valid,
            validation_messages=[]
        )
        return result

data_obj = {
    "id": "obj1",
    "name": "Object 1",
    "type": "X"
}
validator = Validator(schema="examples/example_schema.yaml", plugins=[{"plugin_class": "MyCustomPlugin", "args": {}])
validator.validate(obj=data_obj, target_class="NamedThing")

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

linkml_validator-0.4.5.tar.gz (12.1 kB 查看散列)

上传时间

构建分布

linkml_validator-0.4.5-py3-none-any.whl (14.3 kB 查看散列)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面