chiark / gitweb /
files that make graphs
[familyTree.git] / cgiFiles / bigGraph.py
diff --git a/cgiFiles/bigGraph.py b/cgiFiles/bigGraph.py
new file mode 100755 (executable)
index 0000000..e5304e9
--- /dev/null
@@ -0,0 +1,92 @@
+#!/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)