反序列化CBOR和/或进行CDDL模式验证
项目描述
PyCDDL:反序列化CBOR和/或进行CDDL模式验证
CDDL 是CBOR序列化格式的模式语言。 pycddl
允许您
- 根据Rust
cddl
库,验证CBOR文档是否与特定的CDDL模式匹配。 - 可选地,解码CBOR文档。
用法
验证
这里我们使用 cbor2
库将字典序列化为CBOR,然后对其进行验证
from pycddl import Schema
import cbor2
uint_schema = Schema("""
object = {
xint: uint
}
"""
)
uint_schema.validate_cbor(cbor2.dumps({"xint", -2}))
如果验证失败,将抛出 pycddl.ValidationError
。
验证 + 反序列化
您可以使用 cbor.loads()
将CBOR反序列化为Python对象。然而
cbor2
默认使用C代码,而C编程语言容易发生内存安全问题。如果您正在读取不受信任的CBOR,最好使用Rust库来解码数据。- 您需要解析CBOR两次,一次用于验证,一次用于解码,这将增加性能开销。
通过使用 pycddl
进行反序列化,您解决了第一个问题,而 pycddl
的未来版本将解决第二个问题(请参阅 https://gitlab.com/tahoe-lafs/pycddl/-/issues/37)。
from pycddl import Schema
import cbor2
uint_schema = Schema("""
object = {
xint: uint
}
"""
)
deserialized = uint_schema.validate_cbor(cbor2.dumps({"xint", -2}), True)
assert deserialized == {"xint": -2}
不进行模式验证的反序列化
如果您不关心模式,可以像这样直接反序列化CBOR
from pycddl import Schema
ACCEPT_ANYTHING = Schema("main = any")
def loads(encoded_cbor_bytes):
return ACCEPT_ANYTHING.validate_cbor(encoded_cbor_bytes, True)
在未来的版本中,这将成为一个独立的、更高效的API,请参阅 https://gitlab.com/tahoe-lafs/pycddl/-/issues/36
减少内存使用和安全性限制
为了减少内存使用,您可以传递任何实现了buffer API并存储字节的Python对象,例如 memoryview()
或 mmap
对象。
传入的对象必须是只读的,数据在验证过程中不得更改!如果在验证过程中修改数据,结果可能导致内存损坏或其他未定义行为。
支持的反序列化CBOR类型
如果您将CBOR文档反序列化为Python对象,您可以反序列化
- 空/None。
- 布尔值。
- 浮点数。
- 64位整数以下的整数。尚未支持更大的整数。
- 字节。
- 字符串。
- 列表。
- 映射/字典。
- 集合。
如果用户有需求,将来会添加其他类型。
模式验证不仅限于此列表,而是受cddl
Rust crate的功能限制。
发行说明
0.6.3
功能
- 支持最终版本3.13。
0.6.2
功能
- 增加了对Python 3.13的支持。
0.6.1
错误修复
- 允许PyPy反序列化CBOR。
0.6.0
功能
validate_cbor(serialized_cbor, True)
将CBOR文档反序列化为Python对象,因此您无需单独使用例如cbor2.loads(serialized_cbor)
。
错误修复
- 以更有用的方式释放GIL。
杂项
- 升级到新的
cddl
crate (0.9.4)。
0.5.3
- 升级到新的
cddl
crate (0.9.3)。 - 添加Python 3.12支持。
0.5.2
- 升级到新的
cddl
crate (0.9.2),改进了验证功能。
0.5.1
- 升级到新的
cddl
crate,修复了一些验证错误。
0.5.0
- 支持ARM macOS。
- 停止支持Python 3.7。
0.4.1
- 测试修复,没有用户相关的更改。
0.4.0
validate_cbor()
现在接受只读缓冲区,不仅仅是bytes
。如果您想验证大文件,例如,这很有用,因为您可以使用mmap()
它。- 当解析大于10KiB的文档时,释放GIL。
0.3.0
- 修复了一个主要错误,即如果文档是有效的UTF-8,则库将尝试将其解析为JSON!
- 增加了对ARM macOS的支持。
0.2.2
- 更新到
cddl
0.9.1。
0.2.1
- 添加了PyPy wheel。
0.2.0
- 现在模式仅在创建
Schema
对象时解析一次,而不是每次验证发生时,这应该会提高验证性能。 - 更新到基础 CDDL 库的新版本,这应该会使 CDDL 解析更加兼容。
- 为
Schema
添加了repr()
实现,以便更容易调试。
0.1.11
- 初始发布。
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定选择哪个,请了解有关安装软件包的更多信息。
源分布
pycddl-0.6.3.tar.gz (24.3 kB 查看哈希值)
构建分布
pycddl-0.6.3-cp39-none-win_amd64.whl (1.1 MB 查看哈希)
pycddl-0.6.3-cp38-none-win_amd64.whl (1.1 MB 查看哈希)
关闭
哈希值 用于 pycddl-0.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 33362857d55a5c0f8a58e97d77badf6c6a078081e0c84f82b8c753ddb34267d0 |
|
MD5 | dccecfb2ad19bd02f1ad05babdb7c59d |
|
BLAKE2b-256 | 157fa74075c7c5879f4d2e3415b09f4a7d95ccb7d7f3e0fb6a90d578cf321364 |
关闭
哈希值 用于 pycddl-0.6.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 80d7b7ef2e01a58d28cea9b7be95a988f1f4b409134e63665fd670c1dae1c646 |
|
MD5 | b820b378ffa855d9d02df25d33734083 |
|
BLAKE2b-256 | d6c26dda256f04c8a34a154f6852fdd2ebd9ab781c0eb3f0488c04b8203d8b65 |
关闭
哈希值 用于 pycddl-0.6.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6b0c1dd1c32bc14ff48a40d93c4c695cb296fa8d0fe9307c46963076379a1e33 |
|
MD5 | 0747a58dc23588c0d21a7e32c3229197 |
|
BLAKE2b-256 | 42fd4ea626aed9eef67331602c95c7c6dba7d0e59e3b17d833fdecdc06cebb2f |
关闭
哈希值 用于 pycddl-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f3ea54635a3064d4f2504d3deae81c31ce6c3518081381da1a043be35e7d5865 |
|
MD5 | af79323bb9a2df441df9f8b76c6e62fa |
|
BLAKE2b-256 | a4065030dfeba17e48826417a2125c3bd44bec5736bd7285cc5922cc10bddc84 |
关闭
哈希值 用于 pycddl-0.6.3-cp313-cp313-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ee065d28dac7224728a8c2fd415b1a83bfe90048fa2af9270d525bf94cf08ac7 |
|
MD5 | ece7184cd5058f44a910fb5e9ec732b1 |
|
BLAKE2b-256 | 936df25e296a77b81c64003c8c15ba45070b147b041dd0e03246b16e0e150bcc |
关闭
哈希值 用于 pycddl-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 26fe2145492df9b6ea935e7f62d041357d350ece1c4632c7af3726b17dc2be32 |
|
MD5 | 0a97498301b0f79460928c79bb31d6c9 |
|
BLAKE2b-256 | 708f17aa32359d5d246bac8d28c7273ca7f79595d07d5d418a6b4427c91606cf |
关闭
哈希值 用于 pycddl-0.6.3-cp312-cp312-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c04c25a87401775be5368104aa481783acf3d07a8b12dcdb1ca3014d40726d02 |
|
MD5 | 7900dd0843d7b90de83c28adcb383fa9 |
|
BLAKE2b-256 | 13725f5a7c7414e6cac2e08c45708ca618b9983fdee41c65c4c2c7f3de208abf |
关闭
哈希值 用于 pycddl-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5ef23c89a9a45d2061a515a6e848cbbeeac7a2ee4ffb7fae7f0b3da3df1ee663 |
|
MD5 | 5083d21b676f076fa802ffc1c52758e7 |
|
BLAKE2b-256 | cda3eccf5451f35b8445b541e8a4796b044160b09f76368d37e01f4515ce31a1 |
关闭
哈希值 用于 pycddl-0.6.3-cp311-cp311-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | be28d2435ef580f9db1b0b255458c58dc4fc10d8e672d3ea1b8c18172f3b7b7c |
|
MD5 | 8abd33f2e444fc3aca8eb440e3c7d526 |
|
BLAKE2b-256 | 14ec55dea652ab919acb8a8ff1240f44fc73680a989a731a05d8e5b65c27bd12 |
关闭
哈希值 用于 pycddl-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 00179a5a7b7d62673a502313d6a2596fc92d162ef45e0c1eba046cde18ac3479 |
|
MD5 | 804ddcee3d25cd331cff6a768eb70211 |
|
BLAKE2b-256 | fdcff415e331ef31f72cfd4fd727eaf5ba068cab2abc153300c880a166e359b5 |
关闭
哈希值 用于 pycddl-0.6.3-cp310-cp310-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a2585867ae003433f597daecc8c27672d558d2975f71b3218d7297feead14083 |
|
MD5 | 8e7300343fab43c7fad5a109413a15f8 |
|
BLAKE2b-256 | 2945798ed9e93a729f91b0c0690618b63e4fca06f1e77b0a6cf09cae39debe20 |
关闭
哈希值 用于 pycddl-0.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f8bba18c6cede2bd2f05355605f33a870a4c85eebf284fee8b19a2e15c175bbe |
|
MD5 | ab646f26bf12bbda6ff6ab99b503a9d2 |
|
BLAKE2b-256 | 42331aaa8fd89a4f4ff8e1940f76ce44387c0c0149776ac50e358d4f9dc674d8 |
关闭
哈希值 用于 pycddl-0.6.3-cp39-cp39-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | eab9f26d4036f042273e43e5bb6230a6c8637d2d2d56831dbe4a6ac7acfe07e5 |
|
MD5 | 33868ef2c1d648a1616fbb54f52a430a |
|
BLAKE2b-256 | 9afb43e9e791027eca37ed837a476b4fda93de886680ddc68a052c5a219cca04 |
关闭
哈希值 用于 pycddl-0.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d17ffa1e36b81306e3bd21f522c3f89282c581193a3bd98b6d2a1eb1b106177c |
|
MD5 | fcc8f9551a3c3db1fa3b3432ad2c8b1a |
|
BLAKE2b-256 | 5df4176e175e8f882b9649a036f98b31e70b4c4721a7895de41fef1e94c6cdd9 |
关闭
哈希值 用于 pycddl-0.6.3-cp38-cp38-macosx_11_0_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c882ea6ae0d2daf145acbac166c020e87617f78110c1cdb66854a25c0f63cf1b |
|
MD5 | a6cec51642e8d4c9b13a904a56f1d51c |
|
BLAKE2b-256 | c9d32efd59f1fc0a4d8dc1f160d66f1d65a72b557494ab7a1bfc0a4d4357b040 |