chiark / gitweb /
adding cgiFiles to repo
[familyTree.git] / cgiFiles / rulersGraph.py
diff --git a/cgiFiles/rulersGraph.py b/cgiFiles/rulersGraph.py
new file mode 100755 (executable)
index 0000000..d6373fa
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+
+import cgi
+#import cgitb
+#cgitb.enable()
+import sys
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion as aQ
+import graphQuestions as gQ
+import make_dot as d
+from pygraph.classes.graph import graph
+from pygraph.classes.digraph import digraph
+import pygraph.algorithms.minmax as minmax
+import pygraph.algorithms.accessibility as access
+import pickle
+
+
+def make_graph2(rulers):
+       #old version, slow.
+       myNodes = []
+
+       for i in range(len(rulers)):
+               ruler = rulers[i]
+               if ruler not in myNodes:
+                       myNodes.append(ruler)
+                       path = None
+                       j = -1
+
+                       while  j>-len(rulers):
+                               top = rulers[j]
+                               path = gQ.is_descendant(top,ruler)
+                               if not path is None and len(path)>1:
+                                       myNodes+=path
+                                       break
+                               j = j-1
+                       if path is None:
+                               j = i+1
+                               if j>len(rulers)-1:
+                                       j = i-1
+                               while j>0:
+                                       pre = rulers[j]
+                                       mrca = gQ.relationship(ruler,pre)[0]
+                                       if len(mrca)>0:
+                                               path = \
+                                               gQ.is_descendant(mrca[0],ruler)
+                                               myNodes+=mrca
+                                               myNodes+=path
+                                               path = \
+                                               gQ.is_descendant(mrca[0],pre)
+                                               myNodes+=path
+                                               break
+                                       if j>i:
+                                               j=j+1
+                                       else:
+                                               j=j-1
+                                       if j+1>len(rulers):
+                                               j = i-1
+       draw_graph(myNodes)
+
+def make_graph(rulers):
+
+       myNodes = gQ.join_up(rulers,rulers)
+
+       draw_graph(myNodes)
+
+def draw_graph(myNodes):
+       myNodes = set(myNodes)
+       myNodes = list(myNodes)
+       d.start_dot(6)
+
+       for r in rulers:
+               ruler = aQ.find_person(r)[0]
+               d.add_highlight(ruler)
+       for r in rulers:
+               ruler = aQ.find_person(r)[0]
+               spouses = aQ.find_spouses(r)[0]
+               for s in spouses:
+                       d.add_marriage(ruler,s,[],1)
+
+       for n in myNodes:
+               node = aQ.find_person(n)[0]
+               parents,pIDs,pNs = aQ.find_parents(n)
+               d.add_person(node)
+#              if int(pIDs[0]) in myNodes or int(pIDs[1]) in myNodes:
+               if 1==1:
+                       d.add_marriage(parents[0],parents[1],[node],1)  
+
+       d.create_dot()
+       d.add_subgraphs()
+        d.end_dot()
+
+       if web ==1:
+               d.render_dot()
+       
+global web
+web = 1
+form = cgi.FieldStorage()
+if web==1:
+       terr = form.getvalue('terr')
+else:
+       terr = "King of Great Britain"
+#      terr = None
+#      rulers = [40,42]
+
+conn = aQ.connect()
+if terr != None:
+       if terr[0]=="'":
+               terr = terr[1:-1]
+       rulers = aQ.find_rulers(terr,'<br>')[1]
+else:
+       global rulersStr
+       rulersStr = form.getvalue('names')
+       rulers=[]       
+       if rulersStr!=None:
+               rulersStr = rulersStr.split(',')
+               for r in rulersStr:
+                       rulers.append(int(r))
+make_graph(rulers)
+aQ.close()
+