用于序列化和异步反序列化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 log4j找不到log4jtest。房产?   我在java线程“awteventque1”中获得异常。lang.NullPointerException   java为什么在使用完整路径从文件系统读取文件时出错?   java如何迭代所有注册表项?   java中的安卓 Opencv SVM未正确训练   多线程Java ThreadPoolExecutor关闭特定线程?   如何使用Java NIO CreateDirectory方法设置目录所有者组?   java NatTable混合了固定宽度的列和可调整大小的填充剩余空间   java如何删除特定网络,即使该网络是由安卓上的其他设备创建的?   java Guava toJavaUtil()不存在   java对许多常量使用枚举是有效的memorywise?   java是否可以使用坐标定位JButton?   从WSDL生成java代码导致异常   java如何在安卓中导出javadoc   爬行JAX中的java NoClassDefFoundError错误   java为片段中的文本视图设置区域设置   发送最后一条消息后发生Java RMI RemoteException