chiark / gitweb /
faff with graphs and searching
[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 add_parents(ID,name,startLevel,stopLevel):
12
13         startLevel = startLevel + 1
14         if int(startLevel) == int(stopLevel)+1:
15                 return
16
17         pair=[]
18         [parents, parentIDs,parentNames] = aQ.find_parents(ID)
19
20         pair = []
21         for i in range(len(parents)):
22                 newName = parents[i]
23                 if parentIDs[i]!=0:
24                         newID = parentIDs[i]
25                         if not d.has_node(newName):
26                                 d.add_person(newName)
27                                 add_parents(newID,newName,\
28                                 startLevel,stopLevel)
29                 else:   
30                         d.add_person(newName)
31                 pair.append(newName)
32
33         d.add_marriage(pair[0], pair[1],[name],1)
34
35 def find_oneside_path(ID,start,stop):
36         global myP
37         global myC
38
39         start = start + 1
40         if start == stop+1:
41                 return
42
43         [parents, parentIDs,parentNames] = aQ.find_parents(ID)
44
45         for i in parentIDs:
46                 myP.append(i)
47                 myC.append(ID)
48
49         for i in range(len(parents)):
50                 if parentIDs[i]!=0:
51                         newID = parentIDs[i]
52                         find_oneside_path(newID,start,stop)
53
54 def find_path(ID,ID2,LA,LB):
55         global myP
56         global myC
57
58         myP = []
59         myC = []
60         find_oneside_path(ID,0,int(LA))
61         aP = myP + [ID]
62         aC = myC + [ID]
63         myP = []
64         myC = []
65         find_oneside_path(ID2,0,int(LB))
66         bP = myP + [ID2]
67         bC = myC +[ID2]
68
69         z = set([0])
70         cA = set(aP).intersection(set(bP))
71         cA = cA.difference(z)
72
73         for a in cA:
74                 i = aP.index(a)
75                 c = aC[i]
76
77                 while c!=ID:
78
79                         [parents, parentIDs,parentNames] = aQ.find_parents(c)
80                         s = aQ.find_person(c)[0]
81
82                         d.add_marriage(parents[0],parents[1],[s],1)
83
84
85                         i = aP.index(c)
86                         c = aC[i]
87
88                 [parents, parentIDs,parentNames] = aQ.find_parents(c)
89                 s = aQ.find_person(c)[0]
90
91                 d.add_marriage(parents[0],parents[1],[s],1)
92
93         for a in cA:
94                 i = bP.index(a)
95                 c = bC[i]
96
97                 while c!=ID2:
98                         [parents, parentIDs,parentNames] = aQ.find_parents(c)
99                         s = aQ.find_person(c)[0]
100
101                         d.add_marriage(parents[0],parents[1],[s],1)
102                         i = bP.index(c)
103                         c = bC[i]
104                 [parents, parentIDs,parentNames] = aQ.find_parents(c)
105                 s = aQ.find_person(c)[0]
106
107                 d.add_marriage(parents[0],parents[1],[s],1)
108
109 def make_graph(ID,ID2,LA,LB):
110         d.start_dot(8)  
111         done = 0
112
113         find_path(ID,ID2,LA,LB)
114
115 #       if int(LA)!=0:
116 #               [Self, selfID, selfName] = aQ.find_person(ID)
117 #               d.add_highlight(Self)
118 #               add_parents(selfID,Self,0,LA)
119 #
120 #       if int(LB)!=0:
121 #               [Self, selfID, selfName] = aQ.find_person(ID2)
122 #               d.add_highlight(Self)
123 #               add_parents(selfID,Self,0,LB)
124
125         d.add_subgraphs()
126         d.end_dot()
127         d.render_dot()
128         aQ.close(conn)
129
130 form = cgi.FieldStorage()
131
132 ID = form.getvalue('id')
133 ID2 = form.getvalue('id2')
134 LA = form.getvalue('LA')
135 LB = form.getvalue('LB')
136
137 conn = aQ.connect()
138 make_graph(ID,ID2,LA,LB)
139 aQ.close(conn)
140