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)