cgitb.enable()
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
+import make_dot as d
-def add_quotes(s):
- s = str(s)
- return '\"'+s+'\"'
-
-def parents(ID,name,gr,attr,couples):
+def parents(ID,name):
findParents = "SELECT Name,parentID FROM parents LEFT JOIN"\
+" people ON people.id=parents.parentid"\
+" WHERE parents.id=?;"
-
- ps = ();
- for row in askQuestion.run_query(findParents,(ID,)):
- if row[0]!=None:
- thisN = row[0] + ' '+str(row[1])
- ps = ps + (thisN,)
- if not gr.has_node(thisN):
- gr.add_node(thisN,attr)
- if not gr.has_edge((thisN,name)):
- gr.add_edge((thisN,name))
- newName = thisN
- newID = row[1]
- [gr, couples] = \
- parents(newID,newName,gr,attr,couples)
-
- else:
- thisN = row[1] + ' p' + str(ID)
- if not gr.has_node(thisN):
- ps = ps + (thisN,)
- gr.add_node(thisN,attr)
- gr.add_edge((thisN,name))
- if len(ps)==2:
- if not gr.has_edge(ps):
- gr.add_edge(ps)
- gr.add_edge_attributes(ps,[('dir','none')])
- couples.append(ps)
- return [gr, couples]
-def make_graph(ID,conn):
-
- # Graph creation
- gr = digraph()
- attr = [('fontsize',8)]
- # Add nodes and edges
+ pair =[]
+ for row in askQuestion.run_query(findParents,(ID,)):
+ if row[0]!=None:
+ thisN = row[0] + ' '+str(row[1])
+ newName = thisN
+ newID = row[1]
+ if not d.has_node(thisN):
+ d.add_person(thisN)
+ parents(newID,newName)
+ pair.append(thisN)
- couples = [];
- s = "SELECT name, id FROM people WHERE ID = ?;"
- for row in askQuestion.run_query(s,(ID,)):
- gr.add_node(row[0],attr)
- newName = (row[0])
- newID = row[1]
+ else:
+ thisN = row[1] + ',p ' + str(ID)
+ pair.append(thisN)
+ d.add_person(thisN)
+ d.add_marriage(pair[0],pair[1],[name],1)
+
+def make_graph(ID,conn):
+ global allAncestors
- [gr,couples] = parents(newID,newName,gr,attr,couples)
+ d.start_dot()
+
+ [out, allAncestors,trackLevel,aDict] = \
+ askQuestion.all_ancestors(ID,'\n')
+ Self = allAncestors[0]
- #Draw as jpg
- dot = write(gr)
+ s = "SELECT name||', '|| id FROM people WHERE ID=?"
+ t = (Self,)
+ for row in askQuestion.run_query(s,t):
+ Self = row[0]
+ d.add_highlight(Self)
- dot = dot[:-2]
+ parents(allAncestors[0],Self)
- for couple in couples:
- n1 = add_quotes(couple[0])
- n2 = add_quotes(couple[1])
- line = "\n{rank=same "+n1 + ' '\
- +n2 + "}"
- dot = dot + line
- dot = dot + '\n}'
+ d.add_subgraphs()
+ d.end_dot()
- gvv = gv.readstring(dot)
- gv.layout(gvv,'dot')
+ d.render_dot()
- format = 'jpg'
- print "Content-type: image/" + format + "\n"
- print gv.render(gvv,format)
askQuestion.close(conn)
form = cgi.FieldStorage()