import cgi
import cgitb
-
-import pygraph
-from pygraph.classes.graph import graph
-from pygraph.classes.digraph import digraph
-from pygraph.algorithms.searching import breadth_first_search
-from pygraph.readwrite.dot import write
-import gv
-import StringIO
+import make_dot as d
cgitb.enable()
-def add_quotes(s):
- return '\"'+str(s)+'\"'
-
def make_graph(Self,parents,children,otherparents,spouses):
- # Graph creation
- gr = digraph()
-
- node_attr = [('fontsize',8)]
-
- # Add nodes and edges
- gr.add_node(Self,node_attr)
+ d.start_dot()
+ d.add_highlight(Self)
+
+ countSame = 2;
+ for i in range(1,len(parents)):
+ if parents[i]==parents[i-1]:
+ parents[1]=parents[1] + ' '+str(countSame)
+ countSame = countSame +1
- for p in parents:
- if not gr.has_node(p):
- gr.add_node(p,node_attr)
- if not gr.has_edge((p,Self)):
- gr.add_edge((p,Self))
-
- couples=[]
- if len(parents)==2:
- ps = (parents[0],parents[1])
- if not gr.has_edge(ps):
- gr.add_edge(ps)
- attr = [('dir','none')]
- gr.add_edge_attributes(ps,attr)
- couples.append(ps)
+ d.add_marriage(parents[0],parents[1],[Self],1)
- for i in range(len(children)):
- if not gr.has_node(children[i]):
- gr.add_node(children[i],node_attr)
- if not gr.has_edge ((Self,children[i])):
- gr.add_edge((Self,children[i]))
- if not gr.has_node(otherparents[i]):
- gr.add_node(otherparents[i],node_attr)
- if not gr.has_edge((otherparents[i],children[i])):
- gr.add_edge((otherparents[i],children[i]))
+ for i in range(len(otherparents)):
+ c = children[i]
+ op = otherparents[i]
+ d.add_marriage(Self,op,[c],1)
-
- if not gr.has_edge((otherparents[i],Self)):
- e = (otherparents[i],Self)
- attr = [('dir','none')]
- gr.add_edge(e)
- gr.add_edge_attributes(e,attr)
- couples.append(e)
+ for i in range(len(spouses)):
+ s = spouses[i]
+ d.add_marriage(Self,s,[],1)
- for s in spouses:
- if not gr.has_node(s):
- gr.add_node(s,node_attr)
- if not gr.has_edge((s,Self)):
- e = (s,Self)
- attr = [('dir','none')]
- gr.add_edge(e)
- gr.add_edge_attributes(e,attr)
- couples.append(e)
+ d.subgraphs.append(children)
-
- #Draw as jpg
- dot = write(gr)
- dot = dot[:-2]
+ d.add_subgraphs()
- for couple in couples:
- line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
- +add_quotes(couple[1])+"}"
-
- dot = dot + line
-
- dot = dot + '\n}'
- gvv = gv.readstring(dot)
- gv.layout(gvv,'dot')
-
- format = 'jpg'
+ d.end_dot()
+
+ d.render_dot()
- print "Content-type: image/" + format + "\n"
- print gv.render(gvv,format)
form = cgi.FieldStorage()
s = form.getlist('s')
make_graph(Self,p,c,op,s)
-