chiark / gitweb /
I'm sure I've done something since I remembered to commit...
[familyTree.git] / cgiFiles / bigGraph.py
index 9ec77f97b1f1af207ce0ee6a446de4d55a55309c..082c9967255ac5a9efc2e945097a573412e36aef 100755 (executable)
 #!/usr/bin/python
 
-import cgi
-import cgitb
+#import cgi
+##import cgitb
 import sys
 sys.path.append('/home/naath/familyTreeProject/familyTree')
 import askQuestion as aQ
 import make_dot as d
+from pygraph.classes.digraph import digraph
+import pickle
+import englishUtils as eU
+import graphQuestions as gQ
 
 def add_quotes(s):
         s = str(s)
         return '\"'+s+'\"'
 
-cgitb.enable()
+def an(node):
+       node = int(node)
+       if not g.has_node(node):
+               g.add_node(node)
 
-form = cgi.FieldStorage()
+def ae(edge):
+       iEdge=(int(edge[0]),int(edge[1]))
+       if not g.has_edge(iEdge):
+               g.add_edge(iEdge)
+
+global g
+#cgitb.enable()
+
+#form = cgi.FieldStorage()
 conn = aQ.connect()
 
-famTree = aQ.list_people_parents()
 
 d.start_dot(8)
-for i in range(len(famTree)):
-#for i in range(100):
-       self = famTree[i][0]
+g = digraph()
+
+everyone = 0
+kings = []
+kingsp = []
+s = "SELECT id FROM people"
+for row in aQ.run_query(s,()):
+       sID = int(row[0])
+       print sID
+       self,sID,sN = aQ.find_person(sID)
+       parents,pIDs,pNs = aQ.find_parents(sID)
+       spouses,spIDs,spNs,spDs = aQ.find_spouses(sID)
+
+
+       an(sID)
+
+       if everyone==1:
+               spouses,spIDs,spNs,spDs = aQ.find_spouses(sID)
+               d.add_person(self)
+
+               d.add_marriage(parents[0],parents[1],[self],0)
+               d.add_subgraph(parents)
+               for spouse in spouses:
+                       d.add_marriage(self,spouse,[],0)
+                       d.add_subgraph([self,spouse])
 
-       d.add_person(self)
 
-       ps = []
-       for j in range(len(famTree[i][1])):
-               p = famTree[i][1][j]
-               ps.append(str(p))
+       for pID in pIDs:
+               if pID==0:
+                       continue
+               an(pID)
+               ae((sID,pID))
 
-       if len(ps)==2:
-               d.add_marriage(ps[0],ps[1],[self],0)
-               d.add_subgraph(ps)
 
+       if eU.isKing(self):
+               kings.append(sID)
+               for spID in spIDs:
+                       if int(spID)!=0:
+                               kingsp.append(int(spID))
+               
+filename = '../familyTree/graphedData'
+file = open(filename,'w')
+pickle.dump(g,file)
+file.close()
 
-       for j in range(len(famTree[i][2])):
-                s = famTree[i][2][j]
-                ps = (self,s)
+if everyone==0:
+       gQ.read_graph()
 
-                d.add_marriage(self,s,[],0)
-                d.add_subgraph(ps)
 
+       myNodes = gQ.join_up(kings,kings)
+       myNodes+=gQ.join_up(kingsp,kings)
+       print set(myNodes).difference(set(kings))
+
+       #include people ancestors of wives of kings?
+
+       myNodes = set(myNodes)
+       myNodes = list(myNodes)
+       for sID in myNodes:
+               print sID
+               self,sID,sN = aQ.find_person(sID)
+               parents,pIDs,pNs = aQ.find_parents(sID)
+               spouses,spIDs,spNs,spDs = aQ.find_spouses(sID)
+       
+               d.add_person(self)
+#              if pIDs[0]!=0 or pIDs[1]!=0:
+               if int(pIDs[0]) in myNodes or int(pIDs[1]) in myNodes:
+                       d.add_marriage(parents[0],parents[1],[self],0)
+                       d.add_subgraph(parents)
+
+               else:
+                       print pIDs
+
+               for spouse in spouses:
+                       d.add_marriage(self,spouse,[],0)
+                       d.add_subgraph([self,spouse])
+print myNodes  
+print 'create'
+d.create_dot()
+print 'sub'
 d.add_subgraphs()
+print 'end'
 d.end_dot()
-d.render_dot()         
+print 'render'
+file = '/home/naath/public-html/bigGraph.png'
+d.render_to_file(file)         
+
+aQ.close()
+
 
-aQ.close(conn)