Python 的通用图形接口
项目描述
Python 的通用图形接口
关于
Vert 是一个 Python 包,它试图为图形提供标准化的接口。它通过将图形分成两个独立的抽象层来实现:
图形存储:这是图形实际存储和表示的地方。它可能是一个图形数据库,另一个图形库的数据结构,或者一个 vert 的内置图形存储对象。
图形界面:程序员可以通过直观的面向对象界面使用熟悉的数据类型(如图形、顶点和边)访问图形。
因为 vert 是沿着这些不同的抽象层构建的,所以可以编写代码来利用和操作图而不考虑底层存储机制。存储机制可以在图形对象初始化时自由地相互交换,除了性能和持久性的差异之外,其余代码永远不会知道差异。只需创建一个支持 GraphStore 接口的类即可添加对新图形存储机制的支持。这意味着您永远不必担心供应商锁定,并且更新代码以使用最新技术就像一行更改一样简单。
版权/许可
所有内容版权所有 2017 Aaron M. Hosford。该软件的使用受 MIT 许可的约束。有关完整许可协议,请参阅 LICENSE.txt。
封装结构
test_vert : vert 的单元测试
test_stores : vert.stores 的单元测试
__init__.py:空占位符。
_base.py:包含 vert.stores 测试用例的基类。
test_dbm.py:vert.stores.dbm的单元测试。
test_memory.py:vert.stores.memory 的单元测试。
__init__.py:空占位符。
vert : 包根目录
stores:包含 vert 包开箱即用支持的各种图形存储实现的子包。
__init__.py:空占位符。
base.py:定义所有图形存储必须实现的 GraphStore 接口。GraphStore 接口隐藏了每个图形存储的实现细节,提供了一种一致的、尽管笨重的访问和修改图形内容的方法。
dbm.py:定义 DBMGraphStore,一个 DBM 支持的持久图形存储。
memory.py:定义 MemoryGraphStore,一个非持久的、仅内存的图形存储。
__init__.py:导出 vert 包的公开可见符号。此模块中实际上没有定义任何内容。
graphs.py:定义 Graph、Vertex 和 Edge 类,以及其他支持基础设施。该模块的类将 GraphStore 提供的笨重接口转换为方便且通用的面向对象接口,旨在使无论底层存储机制如何工作,都可以轻松地以一致的方式处理图形。
例子
非持久
from vert import Graph
with Graph() as g:
dog = g.vertices['dog'].add()
cat = g.vertices['cat'].add()
edge = g.edges['dog', 'cat']
print(edge.exists) # False
edge.add()
print(edge.exists) # True
edge.labels.add('chases')
print('chases' in edge.labels) # True
with Graph() as g:
edge = g.edges['dog', 'cat']
print(edge.exists) # False
DBM 支持的持久性
from vert import Graph
with Graph('test.db') as g:
dog = g.vertices['dog'].add()
cat = g.vertices['cat'].add()
edge = g.edges['dog', 'cat']
print(edge.exists) # False
edge.add()
print(edge.exists) # True
edge.labels.add('chases')
print('chases' in edge.labels) # True
with Graph('test.db') as g:
edge = g.edges['dog', 'cat']
print(edge.exists) # Still true
print('chases' in edge.labels) # Still true
定义自己的存储机制
from vert import Graph, GraphStore
class MyGraphStore(GraphStore):
# Implement each of GraphStore's abstract methods here
...
with Graph(MyGraphStore(...)) as g:
# Now the graph consults your back end for storage and retrieval
...
去做:
无向边的测试用例。
为 neo4j、tinkerpop、networkx、sqlite 和其他后端添加可单独安装的图形存储。
添加一个创建第三方模块的示例,以提供对新型图形存储的支持。
添加路径查找和模式匹配等算法。只要有可能,这些都应该由图形存储实现,而不是在接口级别。通过让接口类在调用方法之前检查图形存储中的方法,当存储不提供时,应该可以退回到较慢的默认客户端实现。另一种方法是将方法添加到 GraphStore 类,但如果特定实现不提供算法,则让它们引发特殊的哨兵异常。
添加对事务的支持并使代码线程安全。
添加对读取和写入常见图形文件格式的支持。
添加对从一个图形存储转移到另一个图形存储的支持。
单元测试的 100% 代码覆盖率。
用于单元测试的持续集成。
美化边和顶点的字符串表示。
使 DBM 图形存储更高效。
支持旧版本的 Python。
考虑将标志添加到GraphStore.iter_edges()以独立包含/排除有向和无向边。
向DBMGraphStore添加一个rebuild()方法,通过最少的修改确保存储的图形处于一致状态,允许从磁盘或电源故障中恢复。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。