File indexing completed on 2024-05-12 03:53:40
0001 # -*- coding: utf-8 -*- 0002 # 0003 # SPDX-FileCopyrightText: 2014 Aurélien Gâteau <agateau@kde.org> 0004 # 0005 # SPDX-License-Identifier: BSD-2-Clause 0006 0007 """ 0008 A set of classes and functions to make it easier to work with Graphviz graphs 0009 """ 0010 0011 import gv 0012 0013 0014 class Node(object): 0015 def __init__(self, node_handle): 0016 self.handle = node_handle 0017 0018 @property 0019 def name(self): 0020 return gv.nameof(self.handle) 0021 0022 @property 0023 def label(self): 0024 return gv.getv(self.handle, "label") 0025 0026 @property 0027 def shape(self): 0028 return gv.getv(self.handle, "shape") 0029 0030 0031 class Edge(object): 0032 def __init__(self, edge_handle): 0033 self.handle = edge_handle 0034 0035 @property 0036 def head(self): 0037 handle = gv.headof(self.handle) 0038 if handle is None: 0039 return None 0040 else: 0041 return Node(handle) 0042 0043 @property 0044 def tail(self): 0045 handle = gv.tailof(self.handle) 0046 if handle is None: 0047 return None 0048 else: 0049 return Node(handle) 0050 0051 0052 def get_node_list(graph_h): 0053 """Generator to iterate over all nodes of a graph""" 0054 handle = gv.firstnode(graph_h) 0055 while gv.ok(handle): 0056 yield handle 0057 handle = gv.nextnode(graph_h, handle) 0058 0059 0060 def get_edge_list(graph_h): 0061 """Generator to iterate over all edges of a graph""" 0062 handle = gv.firstedge(graph_h) 0063 while gv.ok(handle): 0064 yield handle 0065 handle = gv.nextedge(graph_h, handle)