chiark / gitweb /
files that make graphs
[familyTree.git] / cgiFiles / bigGraph.py
1 #!/usr/bin/python
2
3 import cgi
4 import cgitb
5 import sys
6 sys.path.append('/home/naath/familyTreeProject/familyTree')
7 import pygraph
8 from pygraph.classes.graph import graph
9 from pygraph.classes.digraph import digraph
10 from pygraph.algorithms.searching import breadth_first_search
11 from pygraph.readwrite.dot import write
12 import gv
13 import StringIO
14 import askQuestion
15
16 def add_quotes(s):
17         s = str(s)
18         return '\"'+s+'\"'
19
20 cgitb.enable()
21
22 form = cgi.FieldStorage()
23 conn = askQuestion.connect()
24
25 famTree = askQuestion.list_people_parents()
26
27 gr = digraph()
28
29 couples = []
30
31 attr = [('fontsize',8)]
32
33 for i in range(len(famTree)):
34         self = famTree[i][0]
35         if not gr.has_node(self):
36                 gr.add_node(self,attr)
37
38         for j in range(len(famTree[i][2])):
39                 s = famTree[i][2][j]
40                 ps = (self,s)
41                 
42                 if not gr.has_node(s):
43                         gr.add_node(s,attr)
44                         a =1 
45                 if not gr.has_edge(ps):
46                         gr.add_edge(ps)
47                         a = ['dir','none']
48                         gr.add_edge_attribute(ps,a)
49                         couples.append(ps)
50
51         ps = ()
52         for j in range(len(famTree[i][1])):
53                 p = famTree[i][1][j]
54                 if p !='?':
55                         ps = ps + (str(p),)
56                         if not gr.has_node(p):
57                                 gr.add_node(p,attr)
58                         if not gr.has_edge((p,self)):
59                                 gr.add_edge((p,self))
60
61         if len(ps)==2 and not gr.has_edge(ps) \
62         and not gr.has_edge((ps[1],ps[0])):
63                 gr.add_edge(ps)
64                 a = ['dir','none']
65                 gr.add_edge_attribute(ps,a)
66                 couples.append(ps)
67                 
68 dot = write(gr)
69
70 dot = write(gr)
71 dot = dot[:-2]
72
73 for couple in couples:
74         line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
75                 +add_quotes(couple[1])+"}"
76
77         dot = dot + line
78
79 dot = dot + '\n}'
80
81
82 gvv = gv.readstring(dot)
83 format='dot'
84 gv.layout(gvv,format)
85
86 format = "jpg"
87 print "Content-type: image/" + format + "\n"
88 print gv.render(gvv,format)
89
90 #gv.render(gvv,'png','famTree.png')
91
92 askQuestion.close(conn)