diff service/arduinoNode/dotrender.py @ 166:c0180bd2b33a

only recompile if the C code is new. redo Device class api. single temperature sensor is working Ignore-this: e78106d25dbb2ac8c5e5d8a81d576358
author drewp@bigasterisk.com
date Sat, 11 Apr 2015 01:43:59 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service/arduinoNode/dotrender.py	Sat Apr 11 01:43:59 2015 -0700
@@ -0,0 +1,47 @@
+from rdflib import Literal, URIRef
+
+def render(configGraph, boards):
+    nodes = {} # uri: (nodeid, nodeline)
+    edges = []
+
+    serial = [0]
+    def addNode(node):
+        if node not in nodes or isinstance(node, Literal):
+            id = 'node%s' % serial[0]
+            if isinstance(node, URIRef):
+                short = configGraph.qname(node)
+            else:
+                short = str(node)
+            nodes[node] = (
+                id,
+                '%s [ label="%s", shape = record, color = blue ];' % (
+                id, short))
+            serial[0] += 1
+        else:
+            id = nodes[node][0]
+        return id
+    def addStmt(stmt):
+        ns = addNode(stmt[0])
+        no = addNode(stmt[2])
+        edges.append('%s -> %s [ label="%s" ];' % (
+            ns, no, configGraph.qname(stmt[1])))
+    for b in boards:
+        for stmt in b.currentGraph():
+            # color these differently from config ones
+            addStmt(stmt)
+    for stmt in configGraph:
+        addStmt(stmt)
+
+    nodes = '\n'.join(line for _, line in nodes.values())
+    edges = '\n'.join(edges)
+    return '''
+    digraph {
+     graph [ranksep=0.4];
+    node [fontsize=8, margin=0];
+    edge[weight=1.2, fontsize=8, fontcolor="gray"];
+    rankdir = LR;
+    charset="utf-8";
+    %(nodes)s
+    %(edges)s
+    }
+    ''' % dict(nodes=nodes, edges=edges)