用于序列化和异步反序列化ubjson的库

ubjsonstream的Python项目详细描述


=它是什么= < BR>
ubjsonstream是处理ubjson([1])格式的纯100%python-3.x库。 < BR>
它包含:
*一个基于类似于状态机概念的异步反序列化程序-给它一个回调,传递数据,解析任何有效数据后就调用回调。
当然,您可以向它传递带数据的常规字符串/bytearray,它会为您解析它。但是如果你有非常大的数据,你可以让这个异步的。
*一个常规序列化程序-给它一个对象,就得到纯数据,
*和序列化程序也可以很好地打印对象。 < BR>
此库不必按照1对1的顺序来遵循建议的草稿,但涵盖了几乎所有内容。 < BR>
=涵盖的内容= < BR> 类型:
*`null`<;=>;`无`
*`noop`<;=>;自定义'ubjsonstream.noop`singleton
*`true`/`false`<;=>;`true`/`false`
*`uint8`/`int8`/`int16`/`int32`/`int64`<;=>;整数
*序列化程序根据值选择最佳的ubjson类型。请参见"src/ubjsonstream/writer.py``intmatcher`"。
*`float32`/`float64`<;=>;`浮动`
*当前序列化程序硬代码为"float64"。现在不知道如何检查float32对于一个数字是否更好。
*`char`<;=>;1-length`str`,仅在反序列化程序中
*高精度数字<;=>;python's`decimal`
*注意:正如草案所述,反序列化程序首先解析hpn的整数长度。目前没有这个限制(也就是说uint8和int64都可以被解析),并且没有安全性。受到警告。
*`string`<;=>;`str`
*与HPN相同。
*`array`<;=>;`列表`
*反序列化程序支持两种优化格式(已知长度+已知类型)。
*序列化程序推断要使用的格式。
*优化格式始终用于长度>;3。我不认为这种类型/数量对较短的是值得的。但我没有对此做任何统计。这是没有开关的。
*如果所有元素都是完全相同的类型,则数组将被类型化。确切地说,我的意思是int8和int64的数组暂时不被输入。
*不确定这是否合法,但…支持未优化数组的类型化数组!
*当然,支持512个空值的类型化数组。它们很短!
*`object`<;=>;`dict`
*优化格式的支持方式与阵列相同。 < BR>
=要做的事情=
*可能有更多的核心测试套件…
*用户定义的自定义标记(及其反序列化程序)。
*也许是某种古怪的rpc的前奏曲?
*这可能对一些已经定义了50种数据类型的高企业级内部项目有帮助。
*可能会将一些代码迁移到C?我认为99999%的代码不需要对象、继承和duck类型。
*优化容器时提升int/float值。目前,99x int8和1x int64的数组将保持未优化状态。好吧,这个例子可能不好,你可以把数字倒过来。
*加载()和转储()。蟒蛇书呆子会喜欢的。
*将PEP-484中的类型提示添加到代码中。
*或者强制对容器进行优化?可能一些新的python类型会有所帮助。
*我并不为它的设计感到骄傲。很多类和状态机都是面向它的,但不一定是可读的。但它起作用了。 < BR>
=结构=
显然"src"包含所有源:
*`src/ubjsonstream/reader.py`是反序列化的东西,
*`src/ubjsonstream/writer.py`是序列化的东西,
*`src/test`包含所有这些的测试。这些不是单位的,但是…我认为他们对整个图书馆进行了全面的测试。其中包括:
*为所有原语生成测试
*生成的容器测试:
*未优化,按计数优化,按类型优化
*数组、对象
*空,有一个元素,有一种类型的n个元素(不仅仅是primitives),每种类型有1个元素,n x n
*高达3级
*一些基本的角点情况(例如,在数组类型标记之后不允许有数组结束标记)。 < BR>
=要求= < BR>
*python>;=3.x.library使用"unittest.mock"。
*这里没有发电机!
*可选:`PIP安装覆盖率` < BR>
=建筑= < BR>
可能: < BR>
python setup.py安装 < BR>
或者,如果你想造一些蛋/轮子: < BR>
python setup.py b列表
python setup.py bdist_u wheel当然,如果您安装了wheel。 < BR>
=用法= < BR>
总有一天……现在,您可以坚持在"src/test/\uu init\uuu.py"中进行测试:
*`testcornercase`-一些角案例。这些硬编码输入错误且无效。
*`testreadwritevariouscombinations`-好的,这并没有向您显示要(反)序列化的示例对象(它们是由'generate\u reader\u tests'生成的-您很勇敢,您会理解这些),但是基本用法非常明显, < BR>
运行它们: < BR>
python setup.py测试 < BR>
如果你有"coverage"工具,你可以看到写得有多糟糕: < BR>
python setup.py覆盖率 < BR>
然后选中"covhtml/index.html"。 < BR>
=接触=
*tomasz sieprawski<;tomasz@sieprawski.eu>; < BR>
[1]http://ubjson.org/

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

推荐PyPI第三方库


热门话题
(数组)列出Java中的实现   java检测JDBC连接中尚未提交的开放事务   java H2语句池   java正在使用cardlayout,有一个我无法解决的问题   java Android MTP客户端打开的是整个设备,而不是单个接口   java Querydsl mongodb gradle springboot问题   java XML使用外部xsd验证anytype类型的XML的一部分   java如何使用Hibernate在实体中创建属性表?   intellij理念“BufferedReader”与“java.io.BufferedReader”之比较。这有关系吗?   java解释多线程的输出   Eclipse中的java Android应用程序:编辑未显示在图形布局上的文本   java如何在struts 1中使用显示标记?