chiark / gitweb /
changed graphs to manual dot file; added pictures; faffed about with text
[familyTree.git] / cgiFiles / ancestorGraph.py
index a0e291dc0c0b18816197b46c56b429780ce098fb..36a9bf33dbca31f890064aaf6be6eb3a736f55db 100755 (executable)
@@ -5,92 +5,59 @@ import cgitb
 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()