Source code for equip.analysis.graph.io

# -*- coding: utf-8 -*-
"""
  equip.analysis.graph.io
  ~~~~~~~~~~~~~~~~~~~~~~~

  Outputs the graph structures

  :copyright: (c) 2014 by Romain Gaucher (@rgaucher)
  :license: Apache 2, see LICENSE for more details.
"""


[docs]class DotConverter(object): def __init__(self, graph): self.g = graph self.buffer = '' self.node_ids = {} @staticmethod
[docs] def process(graph): converter = DotConverter(graph) converter.run() return converter.buffer
[docs] def run(self): self.buffer += 'digraph G {\nrankdir=TD;\n' for node in self.g.nodes: self.add_node(node) for edge in self.g.edges: self.add_edge(edge) self.buffer += '}\n'
[docs] def add_edge(self, edge): labels = '' if edge.kind is not None: labels = '[label="%s"]' % edge.kind self.buffer += '%s -> %s %s;\n' % (self.get_node_id(edge.source), self.get_node_id(edge.dest), labels)
[docs] def add_node(self, node): node_id = self.get_node_id(node) label = '' if node.data is not None: node_kind = ('%s - ' % node.kind) if node.kind is not None else '' label = '[label="Node%d - %s%s"]' % (node.gid, node_kind, node.data) self.buffer += '%s %s;\n' % (node_id, label)
[docs] def get_node_id(self, node): if node not in self.node_ids: self.node_ids[node] = node.gid return 'node_%d' % self.node_ids[node]