将数据结构构建为节点树

node的Python项目详细描述


节点

这个包是zodict的继承者。

概述

数据结构可以描述为树。有些是天生的, 像XML文档、LDAP目录或文件系统目录树,而其他 可以这样对待。

此外,python还提供了定制各种与数据模型相关的数据模型的优雅方法。 API。字典容器类型 几乎完全符合表示树节点的目的。相同的 api也在 zope.interface.common.mapping.ifullmapping 中描述。 另外,节点必须提供层次结构信息。在这种情况下 使用了zope.location.interfaces.ilocation的协定。

拥有这样的数据结构树有一些优点:

  • 不同数据模型和/或数据源的统一数据访问api
  • 树可以在两个方向上遍历
  • 一旦进入内存,节点树就可以快速处理
  • 在节点树上工作的软件可能不需要知道内部数据 结构,只要节点树实现提供正确的 接口合同

用法

节点 附带一些"准备导入和使用"节点。

无序的节点。这可以用作树的基础,其中项目的顺序 无所谓:

>>> fromnode.baseimportBaseNode>>> root=BaseNode(name='root')>>> root['child']=BaseNode()>>> root.printtree()<class 'node.base.BaseNode'>: root
  <class 'node.base.BaseNode'>: child

有序的节点。保留项目顺序:

>>> fromnode.baseimportOrderedNode>>> root=OrderedNode(name='orderedroot')>>> root['foo']=OrderedNode()>>> root['bar']=OrderedNode()>>> root.printtree()<class 'node.base.OrderedNode'>: orderedroot
  <class 'node.base.OrderedNode'>: foo
  <class 'node.base.OrderedNode'>: bar

>>> root.items()[('foo', <OrderedNode object 'foo' at ...>),
('bar', <OrderedNode object 'bar' at ...>)]

节点接口的完整api描述可以在 node.interfaces.inode

对节点功能进行更精细的控制

节点 使用管道工包。

因此,节点的不同行为由管道行为提供。读 有关管道系统的详细信息,请参阅 水管工的文档:

>>> fromplumberimportplumbing>>> fromnode.behaviorsimport(... Nodespaces,... Attributes,... Lifecycle,... NodeChildValidate,... Adopt,... DefaultInit,... Nodify,... OdictStorage,... )>>> @plumbing(... Nodespaces,... Attributes,... Lifecycle,... NodeChildValidate,... Adopt,... DefaultInit,... Nodify,... OdictStorage)... classCustomNode(object):... pass>>> dir(CustomNode)['__class__', '__contains__', '__delattr__', '__delitem__',
'__dict__', '__doc__', '__format__', '__getattribute__',
'__getitem__', '__hash__', '__implemented__', '__init__',
'__iter__', '__len__', '__module__', '__name__',
'__new__', '__nonzero__', '__parent__', '__plumbing__',
'__plumbing_stacks__', '__provides__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__setitem__',
'__sizeof__', '__str__', '__subclasshook__', '__weakref__',
'_nodespaces', '_notify_suppress', 'acquire', 'allow_non_node_childs',
'attribute_access_for_attrs', 'attributes', 'attributes_factory',
'attrs', 'clear', 'copy', 'deepcopy', 'detach', 'events', 'filtereditems',
'filtereditervalues', 'filteredvalues', 'get', 'has_key', 'items',
'iteritems', 'iterkeys', 'itervalues', 'keys', 'name', 'noderepr',
'nodespaces', 'parent', 'path', 'pop', 'popitem', 'printtree',
'root', 'setdefault', 'storage', 'update', 'values']

正如 dir 调用所显示的,使用给定的行为检测 customnode 类, 因此定义一个完整的 inode 实现 行为,现在很容易做到:

>>> node=CustomNode()>>> node['child']=CustomNode()>>> node.printtree()<class 'CustomNode'>: None
  <class 'CustomNode'>: child

>>> fromnode.interfacesimportINode>>> INode.providedBy(node)True

行为

节点包提供了几个管道行为:

< DL>
节点.行为.默认初始化
在节点上提供默认功能的管道部件。 参见node.interfaces.idefaultinit
节点.行为.节点化
管道部分,以填补整个inode api的空白。 参见node.interfaces.inodify
节点.行为.采用
提供儿童收养的管道部分。 参见node.interfaces.iadopt
node.behaviors.nodechildvalidate
用于子节点验证的管道部件。 请参见node.interfaces.inodechildvalidate
节点.行为.Unicode软件
管道部分,以确保键和字符串值的Unicode。 参见node.interfaces.iunicodeaware
节点.行为.别名
提供子键别名的管道部件。 参见node.interfaces.ialias
节点。行为。asattraccess
作为iattributeaccess实现获取节点的管道部分。 请参见node.interfaces.iasattracess
节点.行为.子工厂
提供子工厂的管道部件 \uu getitem\uu 如果管道端点上还不存在按键对象。 参见node.interfaces.ichildfactory。
节点.行为.固定子节点
将固定字典初始化为子字典的管道部件。 请参见node.interfaces.ifixedchildren。
node.behaviors.getAttrChildren
根据属性 名称未使用。 请参见node.interfaces.igetAttrChildren
节点。行为。节点空间
用于在节点上提供节点空间的管道部件。 请参见node.interfaces.inodespaces
节点、行为、属性
在节点上提供属性的管道部件。 需要 node.behaviors.nodespaces 部分。 参见node.interfaces.iattributes
节点、行为、生命周期
管道部件负责生命周期事件。 请参见node.interfaces.i有效周期
节点、行为、属性生命周期
在属性操作时处理ifecycle事件的管道部分。 请参见node.interfaces.iattributeslifecycle。
节点。行为。无效
用于节点失效的管道部件。 参见node.interfaces.invalidate
node.behaviors.volatileStorageInvalidate
使用易失性存储器使节点失效的管道部件。 参见node.interfaces.invalidate
节点.行为.缓存
用于缓存的管道部件。 参见node.interfaces.icache。
节点.行为.顺序
用于订购支架的管道部件。 参见node.interfaces.iorder。
node.behaviors.uuidaware
在节点上提供uuid的管道部件。 参见node.interfaces.iuuidaware
节点.行为.引用
管道部件,包含树中包含的所有节点的索引。 参见node.interfaces.ireference
节点、行为、存储
提供抽象存储访问。 参见node.interfaces.istorage
node.behaviors.dictstorage
提供字典存储。 参见node.interfaces.istorage
节点.行为.odictstorage
提供有序字典存储。 参见node.interfaces.istorage
节点.行为.回退
提供了一种通过存储在另一个节点上的子路径返回值的方法。 参见node.interfaces.ifallback
节点、行为、事件
提供事件注册和调度机制。 参见node.interfaces.ievents

JSON序列化

节点可以序列化为json,也可以从json反序列化:

>>> fromnode.serializerimportserialize>>> json_dump=serialize(BaseNode(name='node'))>>> fromnode.serializerimportdeserialize>>> deserialize(json_dump)<BaseNode object 'node' at ...>

有关序列化API的详细信息,请读取 文档/存档/序列化程序.rst

迁移

行为类似于zodict.node的节点包含在node.base.node中。 此节点应该用于从zodict迁移。

查看原始节点构建的行为也很有用 从

可能实现不需要同时执行所有行为。在这种情况下 直接在节点类上定义节点管道,而不是从 node.base.node

测试覆盖率

https://travis-ci.org/bluedynamics/node.svg?branch=master

测试覆盖率报告摘要:

Name                                                    Stmts   Miss  Cover
---------------------------------------------------------------------------
src/node/base.py                                           23      0   100%
src/node/behaviors/__init__.py                             40      0   100%
src/node/behaviors/alias.py                               103      0   100%
src/node/behaviors/attributes.py                           37      0   100%
src/node/behaviors/cache.py                                69      0   100%
src/node/behaviors/common.py                              130      0   100%
src/node/behaviors/events.py                              114      0   100%
src/node/behaviors/fallback.py                             45      0   100%
src/node/behaviors/lifecycle.py                            48      0   100%
src/node/behaviors/mapping.py                             117      0   100%
src/node/behaviors/nodespace.py                            33      0   100%
src/node/behaviors/nodify.py                               87      0   100%
src/node/behaviors/order.py                                42      0   100%
src/node/behaviors/reference.py                            83      0   100%
src/node/behaviors/storage.py                              31      0   100%
src/node/compat.py                                         10      0   100%
src/node/events.py                                         32      0   100%
src/node/interfaces.py                                    101      0   100%
src/node/locking.py                                        23      0   100%
src/node/serializer.py                                    134      0   100%
src/node/testing/__init__.py                                1      0   100%
src/node/testing/base.py                                   66      0   100%
src/node/testing/env.py                                    18      0   100%
src/node/testing/fullmapping.py                           177      0   100%
src/node/tests/__init__.py                                 88      0   100%
src/node/tests/test_alias.py                              113      0   100%
src/node/tests/test_attributes.py                          38      0   100%
src/node/tests/test_base.py                               245      0   100%
src/node/tests/test_cache.py                               98      0   100%
src/node/tests/test_common.py                             154      0   100%
src/node/tests/test_events.py                             184      0   100%
src/node/tests/test_fallback.py                            46      0   100%
src/node/tests/test_lifecycle.py                          105      0   100%
src/node/tests/test_locking.py                             43      0   100%
src/node/tests/test_mapping.py                             22      0   100%
src/node/tests/test_nodespace.py                           44      0   100%
src/node/tests/test_nodify.py                              45      0   100%
src/node/tests/test_order.py                              138      0   100%
src/node/tests/test_reference.py                           74      0   100%
src/node/tests/test_serializer.py                         222      0   100%
src/node/tests/test_storage.py                             41      0   100%
src/node/tests/test_testing.py                            688      0   100%
src/node/tests/test_tests.py                               50      0   100%
src/node/tests/test_utils.py                              127      0   100%
src/node/utils.py                                         142      0   100%

python版本

  • python 2.7,3.3+,pypy
  • 可与其他版本(未经测试)一起使用

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

推荐PyPI第三方库


热门话题
java JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储