chiark / gitweb /
c700ff01eae4833b1d86407cdd106b1dd40c6b84
[familyTree.git] / cgiFiles / jointAncestorGraph.py
1 #!/usr/bin/python
2
3 import cgi
4 import cgitb
5 cgitb.enable()
6 import sys
7 sys.path.append('/home/naath/familyTreeProject/familyTree')
8 import make_dot as d
9 import askQuestion as aQ
10
11 def find_oneside_path(ID,start,stop):
12         global myP
13         global myC
14
15         start = start + 1
16         if start == stop+1:
17                 return
18
19         [parents, parentIDs,parentNames] = aQ.find_parents(ID)
20
21         for i in parentIDs:
22                 myP.append(i)
23                 myC.append(ID)
24
25         for i in range(len(parents)):
26                 if parentIDs[i]!=0:
27                         newID = parentIDs[i]
28                         find_oneside_path(newID,start,stop)
29
30 def find_path(ID,ID2,LA,LB):
31         global myP
32         global myC
33
34         myP = []
35         myC = []
36         find_oneside_path(ID,0,int(LA))
37         aP = myP + [ID]
38         aC = myC + [ID]
39         myP = []
40         myC = []
41         find_oneside_path(ID2,0,int(LB))
42         bP = myP + [ID2]
43         bC = myC +[ID2]
44
45         z = set([0])
46         cA = set(aP).intersection(set(bP))
47         cA = cA.difference(z)
48
49         for a in cA:
50                 i = aP.index(a)
51                 c = aC[i]
52
53                 while c!=ID:
54
55                         [parents, parentIDs,parentNames] = aQ.find_parents(c)
56                         s = aQ.find_person(c)[0]
57
58                         d.add_marriage(parents[0],parents[1],[s],1)
59
60
61                         i = aP.index(c)
62                         c = aC[i]
63
64                 [parents, parentIDs,parentNames] = aQ.find_parents(c)
65                 s = aQ.find_person(c)[0]
66
67                 d.add_marriage(parents[0],parents[1],[s],1)
68
69         for a in cA:
70                 i = bP.index(a)
71                 c = bC[i]
72
73                 while c!=ID2:
74                         [parents, parentIDs,parentNames] = aQ.find_parents(c)
75                         s = aQ.find_person(c)[0]
76
77                         d.add_marriage(parents[0],parents[1],[s],1)
78                         i = bP.index(c)
79                         c = bC[i]
80                 [parents, parentIDs,parentNames] = aQ.find_parents(c)
81                 s = aQ.find_person(c)[0]
82
83                 d.add_marriage(parents[0],parents[1],[s],1)
84
85 def make_graph(ID,ID2,LA,LB):
86         d.start_dot(8)  
87         done = 0
88
89         for tID in [ID, ID2]:
90                 [Self, selfID, selfName] = aQ.find_person(tID)
91                 d.add_highlight(Self)
92
93         find_path(ID,ID2,LA,LB)
94
95         d.add_subgraphs()
96         d.end_dot()
97         d.render_dot()
98         aQ.close(conn)
99
100 form = cgi.FieldStorage()
101
102 ID = form.getvalue('id')
103 ID2 = form.getvalue('id2')
104 LA = form.getvalue('LA')
105 LB = form.getvalue('LB')
106
107 conn = aQ.connect()
108 make_graph(ID,ID2,LA,LB)
109 aQ.close(conn)
110