Skip to main content

Python 的通用图形接口

项目描述

Python 的通用图形接口

关于

Vert 是一个 Python 包,它试图为图形提供标准化的接口。它通过将图形分成两个独立的抽象层来实现:

  • 图形存储:这是图形实际存储和表示的地方。它可能是一个图形数据库,另一个图形库的数据结构,或者一个 vert 的内置图形存储对象。

  • 图形界面:程序员可以通过直观的面向对象界面使用熟悉的数据类型(如图形、顶点和边)访问图形。

因为 vert 是沿着这些不同的抽象层构建的,所以可以编写代码来利用和操作图而不考虑底层存储机制。存储机制可以在图形对象初始化时自由地相互交换,除了性能和持久性的差异之外,其余代码永远不会知道差异。只需创建一个支持 GraphStore 接口的类即可添加对新图形存储机制的支持。这意味着您永远不必担心供应商锁定,并且更新代码以使用最新技术就像一行更改一样简单。

封装结构

  • 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()方法,通过最少的修改确保存储的图形处于一致状态,允许从磁盘或电源故障中恢复。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

vert-1.0.1.tar.gz (21.8 kB 查看哈希)

已上传 source

内置分布

vert-1.0.1-py3-none-any.whl (26.1 kB 查看哈希

已上传 3 5