PY2NEO兼容层
py2neo-compat的Python项目详细描述
Py2Neo_兼容
说明
创建跨版本兼容层的尝试(可能失败) py2neo
目的
py2neo的每一个主要版本都从根本上(而且似乎是无偿的) 更改了api:package/module organization,数据库连接的名称 类,用于处理节点和关系的工具-更不用说 更复杂的功能,如与模式交互。
这里实现的是大量的猴子补丁和其他黑客 在v1.6和v2之间运行。
背景
在工作中,我继承了一个围绕py2neo v1.6开发的代码库,以及数据访问 与商业逻辑有着错综复杂的联系。 测试是稀缺的,存在的测试是系统测试,而不是 解决错误、边界条件等,因此更新py2neo的每次使用 因为一个新版本将是非常危险的。 (更不用说我只是在学习py2neo&neo4j。)
我最初的计划是升级到py2neo v2(当时是最新的) 通过monkey补丁和重命名以增量方式使v1.6能够用作 如果是v2,当代码全部更改为使用v2时,请升级到 PY2ONE V2。 一路上我有机会开发一个新的,独立的 所以我开始为应用程序创建一个新的dist 开发一些可以与遗留系统共享的库,因此 为共享库创建了单独的dist。 我不想用旧的v1.6开发新的应用程序,所以 库需要同时支持v1.6和v2。 我还启动了一个名为gryaml的单独项目,从 yaml文件,它还需要支持多个版本才能 作为测试夹具运行。
功能
-
独立于实现的名称,可选地修补到
py2neo
调用时的命名空间和类
py2neo_compat.monkey_patch_py2neo
:
- 图形
- 图形.创建唯一的 (仅单路径)
- graph.cypher.stream
- graph.cypher.execute执行
- 图形.全部删除
- 图表。查找一个
- graph.legacy.delete_index
- graph.legacy.获取索引*
- 图形资源
- graph.uri
- 节点
- node.labels 属性(仅获取)
- node.pull 方法(在v1中别名为 refresh )
- node.push 方法(在v1中别名为refresh )
-
py2neo_compat
- 图形元数据
- 创建节点
- py2neo_entity_to_dict aka to_dict :转储 节点或关系为a dict
- 模式:
- 模式onstraints -为 所有约束(不仅仅是使用中的约束)。
- 模式索引 -生成 all的模式索引元组 索引(不只是使用中的索引)。
- 删除模式
- 删除约束
- 删除索引
- 创建模式
- py2neo v1.6不会创建带有抽象节点的标签。
- 在创建节点后没有通用的方法来修改标签;v1使用 操作标签的特殊方法,而v2使用子类 设置。简单的方法是将v1方法添加到v2,但是 我试图避免传播v1 api;更难的方法是 为v1实现一个类似set的类,但要做的工作要多得多。另一 另一种选择是一个兼容性函数,它最终成为另一个 应用程序编程接口。我不需要在创建后操纵标签。
未来
对于未来的发展,我正在考虑几个选择:
- 尽量只支持v3而忽略v4。
- 忽略v3并在v4上重新实现我需要的功能。
- 完全忽略v3和v4,在v2和 仅螺栓连接python驱动程序
非猴子修补的方法:
- 代替猴子修补,子类或包装适当的类 并重新实现不同的位。客户端将直接从 py2neo_compat 包,而不是导入,调用monkey补丁 函数,然后从 py2neo 导入
- 采用基于函数的方法,其中接收器是一个显式参数 而不是有方法。这可能是多余的,因为 主接收器最终嵌入到名称中。
对于节点和关系以及基本的 图形功能不支持模式、批处理和旧索引。
学分
这个包是用cookiecutter和项目模板创建的。