7 from pygraph.classes.graph import graph
8 from pygraph.classes.digraph import digraph
9 from pygraph.algorithms.searching import breadth_first_search
10 from pygraph.readwrite.dot import write
16 return '\"'+str(s)+'\"'
19 def make_graph(Self,parents,children,otherparents,spouses):
23 node_attr = [('fontsize',8)]
26 gr.add_node(Self,node_attr)
30 if not gr.has_node(p):
31 gr.add_node(p,node_attr)
32 if not gr.has_edge((p,Self)):
37 ps = (parents[0],parents[1])
38 if not gr.has_edge(ps):
40 attr = [('dir','none')]
41 gr.add_edge_attributes(ps,attr)
44 for i in range(len(children)):
45 if not gr.has_node(children[i]):
46 gr.add_node(children[i],node_attr)
47 if not gr.has_edge ((Self,children[i])):
48 gr.add_edge((Self,children[i]))
49 if not gr.has_node(otherparents[i]):
50 gr.add_node(otherparents[i],node_attr)
51 if not gr.has_edge((otherparents[i],children[i])):
52 gr.add_edge((otherparents[i],children[i]))
55 if not gr.has_edge((otherparents[i],Self)):
56 e = (otherparents[i],Self)
57 attr = [('dir','none')]
59 gr.add_edge_attributes(e,attr)
63 if not gr.has_node(s):
64 gr.add_node(s,node_attr)
65 if not gr.has_edge((s,Self)):
67 attr = [('dir','none')]
69 gr.add_edge_attributes(e,attr)
78 for couple in couples:
79 line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
80 +add_quotes(couple[1])+"}"
85 gvv = gv.readstring(dot)
90 print "Content-type: image/" + format + "\n"
91 print gv.render(gvv,format)
93 form = cgi.FieldStorage()
95 Self = form.getvalue('Self')
98 op = form.getlist('op')
101 make_graph(Self,p,c,op,s)