Mercurial > code > home > repos > homeauto
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)