chiark / gitweb /
I'm sure I've done something since I remembered to commit...
[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 askQuestion as aQ
8 import make_dot as d
9 from pygraph.classes.digraph import digraph
10 import pickle
11 import englishUtils as eU
12 import graphQuestions as gQ
13
14 def add_quotes(s):
15         s = str(s)
16         return '\"'+s+'\"'
17
18 def an(node):
19         node = int(node)
20         if not g.has_node(node):
21                 g.add_node(node)
22
23 def ae(edge):
24         iEdge=(int(edge[0]),int(edge[1]))
25         if not g.has_edge(iEdge):
26                 g.add_edge(iEdge)
27
28 global g
29 #cgitb.enable()
30
31 #form = cgi.FieldStorage()
32 conn = aQ.connect()
33
34
35 d.start_dot(8)
36 g = digraph()
37
38 everyone = 0
39 kings = []
40 kingsp = []
41 s = "SELECT id FROM people"
42 for row in aQ.run_query(s,()):
43         sID = int(row[0])
44         print sID
45         self,sID,sN = aQ.find_person(sID)
46         parents,pIDs,pNs = aQ.find_parents(sID)
47         spouses,spIDs,spNs,spDs = aQ.find_spouses(sID)
48
49
50         an(sID)
51
52         if everyone==1:
53                 spouses,spIDs,spNs,spDs = aQ.find_spouses(sID)
54                 d.add_person(self)
55
56                 d.add_marriage(parents[0],parents[1],[self],0)
57                 d.add_subgraph(parents)
58                 for spouse in spouses:
59                         d.add_marriage(self,spouse,[],0)
60                         d.add_subgraph([self,spouse])
61
62
63         for pID in pIDs:
64                 if pID==0:
65                         continue
66                 an(pID)
67                 ae((sID,pID))
68
69
70         if eU.isKing(self):
71                 kings.append(sID)
72                 for spID in spIDs:
73                         if int(spID)!=0:
74                                 kingsp.append(int(spID))
75                 
76 filename = '../familyTree/graphedData'
77 file = open(filename,'w')
78 pickle.dump(g,file)
79 file.close()
80
81 if everyone==0:
82         gQ.read_graph()
83
84
85         myNodes = gQ.join_up(kings,kings)
86         myNodes+=gQ.join_up(kingsp,kings)
87         print set(myNodes).difference(set(kings))
88
89         #include people ancestors of wives of kings?
90
91         myNodes = set(myNodes)
92         myNodes = list(myNodes)
93         for sID in myNodes:
94                 print sID
95                 self,sID,sN = aQ.find_person(sID)
96                 parents,pIDs,pNs = aQ.find_parents(sID)
97                 spouses,spIDs,spNs,spDs = aQ.find_spouses(sID)
98         
99                 d.add_person(self)
100 #               if pIDs[0]!=0 or pIDs[1]!=0:
101                 if int(pIDs[0]) in myNodes or int(pIDs[1]) in myNodes:
102                         d.add_marriage(parents[0],parents[1],[self],0)
103                         d.add_subgraph(parents)
104
105                 else:
106                         print pIDs
107
108                 for spouse in spouses:
109                         d.add_marriage(self,spouse,[],0)
110                         d.add_subgraph([self,spouse])
111 print myNodes   
112 print 'create'
113 d.create_dot()
114 print 'sub'
115 d.add_subgraphs()
116 print 'end'
117 d.end_dot()
118 print 'render'
119 file = '/home/naath/public-html/bigGraph.png'
120 d.render_to_file(file)          
121
122 aQ.close()
123
124