一个非常简单的实用程序,用于验证对象是否具有某种结构。
项目描述
简单的模式验证器
一个非常简单的实用程序,用于验证对象是否具有某种结构。在我们的一些项目中使用。
基本用法
pip install simple_schema_validator
一个例子:
假设我们有一个返回以下数据的 API:
{
"user": 1,
"profile": {
"email": "some@user.com",
"name": "Some User",
"age": 20
},
"tokens": {
"jwt": "...",
"refresh": "...",
"firebase": "...",
}
}
我们正在编写一个简单的集成测试,以确保响应具有一定的结构。
然后我们可以像这样使用模式验证器:
from simple_schema_validator import schema_validator
data = get_data_from_api()
schema = {
'user': Any,
'profile': {
'email': Any,
'name': Any,
'age': Any
},
'tokens': {
'jwt': Any,
'refresh': Any,
'firebase': Any
}
}
validation = schema_validator(schema, data)
if not validation:
print(f'Keys in data, but not in schema: {validation.additional_keys}')
print(f'Keys in schema, but not in data: {validation.missing_keys}')
print(f'Keys with different type from schema {validation.type_errors}')
missing_keys是那些在 中需要schema但在 中找不到的键data。additional_keys是那些存在于data中但不是schema.validation_errors是那些与 indata中定义的类型不同的键schema。
嵌套键用“点”表示法 - profile.email、tokens.jwt等表示。
类型检查
该实用程序支持简单的模式类型检查。
目前,模式中支持的类型有:
intfloatstrbooltyping.Any(来自 Pythontyping库)simple_schema_validator.types.Optional(自定义类型,在包中定义)
如果类型是Any,则不进行类型检查。
如果存在类型不匹配,则将错误放置在type_errors结果的属性中,该属性是类型错误的列表。
单一类型错误的一般格式是:
{
'path': 'the.path.to.the.value.in.data',
'expected': the_expected_type_as_defined_in_the_schema,
'actual': the_actual_type_of_the_value
}
这是一个例子:
from simple_schema_validator import schema_validator, types
schema = {
'user': str,
'profile': {
'email': str,
'name': str,
'age': int
},
'tokens': {
'jwt': str,
'refresh': str,
'firebase': str
}
}
data = {
'user': 'Some User',
'profile': {
'email': 'someuser@hacksoft.io',
'name': 'Some User',
'age': "29"
},
'tokens': {
'jwt': 'some token value',
'refresh': 'some token value',
'firebase': 'some token value'
}
}
result = schema_validator(schema, data)
assert bool(result) is False
assert result.type_errors == [{'path': 'profile.age', 'expected': int, 'actual': str}]
可选类型
模式验证器支持可选类型。
您可以执行以下操作:
from simple_schema_validator import schema_validator, types
schema = {
'a': types.Optional[int]
}
data_1 = {
'a': None
}
data_2 = {
'a': 1
}
data_3 = {
'a': 'some_string'
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is True
assert bool(schema_validator(schema, data_3)) is False
此外,您可以在架构中定义可选分支:
from simple_schema_validator import schema_validator, types
schema = {
'a': types.Optional[{
'b': int
}]
}
data_1 = {
'a': None
}
data_2 = {
'a': 1
}
data_3 = {
'a': {
'b': 1
}
}
data_4 = {
'a': {
'b': 'some_string'
}
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is False
assert bool(schema_validator(schema, data_3)) is True
assert bool(schema_validator(schema, data_4)) is False
您也可以将它与可选列表一起使用:
from simple_schema_validator import schema_validator, types
schema = {
'a': types.Optional[[int]]
}
data_1 = {
'a': None
}
data_2 = {
'a': 1
}
data_3 = {
'a': [1, 2, 3]
}
data_4 = {
'a': ['some_string']
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is False
assert bool(schema_validator(schema, data_3)) is True
assert bool(schema_validator(schema, data_4)) is False
列表类型
架构验证器支持列表类型。
您可以执行以下操作:
from simple_schema_validator import schema_validator, types
schema = {
'a': types.List[int]
}
data_1 = {
'a': [1, 2, 3]
}
data_3 = {
'a': ['some_string']
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is False
递归模式
模式验证器支持列表中模式的类型检查。
您可以执行以下操作:
from simple_schema_validator import schema_validator, types
schema = {
'a': [{'b': int}]
}
data_1 = {
'a': [{'b': 1}]
}
data_2 = {
'a': [{'b': 'some_string'}]
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is False
from simple_schema_validator import schema_validator, types
schema = {
'a': [{'b': [int]}]
}
data_1 = {
'a': [{'b': [1]}]
}
data_2 = {
'a': [{'b': [1, 2, 3]}]
}
data_3 = {
'a': [{'b': ['some_string']}]
}
data_4 = {
'a': [{'b': [1, 'some_string']}]
}
data_5 = {
'a': [{'b': ['some_string', 'other_string']}]
}
data_6 = {
'a': [{'b': ['some_string', 1]}]
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is True
assert bool(schema_validator(schema, data_3)) is False
assert bool(schema_validator(schema, data_4)) is False
assert bool(schema_validator(schema, data_5)) is False
assert bool(schema_validator(schema, data_6)) is False
您也可以对可选分支执行相同操作:
from simple_schema_validator import schema_validator, types
schema = {
'a': [{'b': types.Optional[int]}]
}
data_1 = {
'a': [{
'b': {
'c': 1,
'd': 2
}
}]
}
data_2 = {
'a': [{'b': 'some_string'}]
}
assert bool(schema_validator(schema, data_1)) is True
assert bool(schema_validator(schema, data_2)) is False
例子
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
simple_schema_validator-0.0.9.tar.gz
(8.0 kB
查看哈希)
内置分布
关
simple_schema_validator -0.0.9.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 81382f2292ebbd5f475b232beb25002f345794ae4668603eb48435534dbeca02 |
|
| MD5 | 867b927fd43cb73116357a10e4337de9 |
|
| 布莱克2-256 | 2cda7cb82756fc52eea3599142b72fa6467325b0c8eaac546d950f4ccb1b29d1 |
关
simple_schema_validator -0.0.9-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | d72af6f10b1af94c612bf6658868801e47d5fd55114473f00a1e56ad21504373 |
|
| MD5 | 1690f0bb13c716a940e40420813e011d |
|
| 布莱克2-256 | 2bdf82a61d86ac080cb7d8a9fb01e82590cdb5ce9515f172aa95aa33e72dbc5e |