--- /dev/null
+#!/usr/bin/python
+
+import cgi
+import cgitb
+import sys
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+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 askQuestion
+
+def add_quotes(s):
+ s = str(s)
+ return '\"'+s+'\"'
+
+cgitb.enable()
+
+form = cgi.FieldStorage()
+conn = askQuestion.connect()
+
+famTree = askQuestion.list_people_parents()
+
+gr = digraph()
+
+couples = []
+
+attr = [('fontsize',8)]
+
+for i in range(len(famTree)):
+ self = famTree[i][0]
+ if not gr.has_node(self):
+ gr.add_node(self,attr)
+
+ for j in range(len(famTree[i][2])):
+ s = famTree[i][2][j]
+ ps = (self,s)
+
+ if not gr.has_node(s):
+ gr.add_node(s,attr)
+ a =1
+ if not gr.has_edge(ps):
+ gr.add_edge(ps)
+ a = ['dir','none']
+ gr.add_edge_attribute(ps,a)
+ couples.append(ps)
+
+ ps = ()
+ for j in range(len(famTree[i][1])):
+ p = famTree[i][1][j]
+ if p !='?':
+ ps = ps + (str(p),)
+ if not gr.has_node(p):
+ gr.add_node(p,attr)
+ if not gr.has_edge((p,self)):
+ gr.add_edge((p,self))
+
+ if len(ps)==2 and not gr.has_edge(ps) \
+ and not gr.has_edge((ps[1],ps[0])):
+ gr.add_edge(ps)
+ a = ['dir','none']
+ gr.add_edge_attribute(ps,a)
+ couples.append(ps)
+
+dot = write(gr)
+
+dot = write(gr)
+dot = dot[:-2]
+
+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)
+format='dot'
+gv.layout(gvv,format)
+
+format = "jpg"
+print "Content-type: image/" + format + "\n"
+print gv.render(gvv,format)
+
+#gv.render(gvv,'png','famTree.png')
+
+askQuestion.close(conn)