chiark / gitweb /
I'm sure I've done something since I remembered to commit...
[familyTree.git] / cgiFiles / smallGraph.py
1 #!/usr/bin/python
2
3 import cgi
4 #import cgitb
5 import make_dot as d
6 import sys
7 sys.path.append('/home/naath/familyTreeProject/familyTree')
8 import askQuestion as aQ
9 #cgitb.enable()
10
11 def add_parents(ID,s,cl,pl,pos,os):
12         Self = aQ.find_person(ID)[0]
13         
14         [parents, parentIDs,parentNames] = aQ.find_parents(ID)
15
16         if s==0:
17                 d.add_marriage(parents[0],parents[1],[Self],1)
18         
19         else:
20                 for p in parentIDs:
21                         if p!=0:
22                                 add_children(p,cl+1,os)
23         if pl>1:
24                 for p in parentIDs:
25                         if p!=0:
26                                 add_parents(p,s,cl,pl-1,pos,os)
27
28         if pos==1:
29                 for p in parentIDs:
30                         if p!=0:
31                                 add_spouses(p,os,cl)
32
33
34 def add_children(ID,cl,os):
35         Self = aQ.find_person(ID)[0]
36
37
38         [nodes,IDs,names,childrenBorn] = \
39                 aQ.find_children(ID)
40         
41         children=[]
42         for n in nodes:
43                 c = n[0]
44                 children.append(c)
45                 op = n[1]
46                 d.add_marriage(Self,op,[c],1)
47
48         #d.subgraphs.append(children)
49
50         if cl>1:
51                 for c in IDs:
52                         add_children(c[0],cl-1,os)
53                         add_spouses(c[0],os,cl-1)
54
55 def add_spouses(ID,os,cl):
56         Self = aQ.find_person(ID)[0]
57
58         [spouses,spousesID,spousesNames,sD] = aQ.find_spouses(ID)
59
60         for s in spouses:
61                 d.add_marriage(Self,s,[],1)
62         
63
64         if os==1:
65                 for s in spousesID:
66                         if s!=0:
67                                 add_spouses(s,0,cl)
68                                 add_children(s,cl,os)
69
70
71 def make_graph(ID,v,fs):
72         pl = v[0]
73         cl = v[1]
74         s = v[2]
75         os = v[3]
76         pos = v[4]
77
78         d.start_dot(fs) 
79         Self = aQ.find_person(ID)[0]
80
81         d.add_highlight(Self)
82
83         add_parents(ID,s,cl,pl,pos,os)
84         add_children(ID,cl,os)
85         add_spouses(ID,os,cl)
86
87         d.create_dot()
88         d.add_subgraphs()
89         
90         d.end_dot()
91                 
92         d.render_dot()
93
94 def check_int(s):
95         try:
96                 return int(s)
97         except ValueError:
98                 return -1
99
100 form = cgi.FieldStorage()
101
102 ID = form.getvalue('ID')
103
104
105 variables = ['pl', 'cl', 's', 'os', 'pos']
106 values=[]
107 for s in variables:
108         values.append(form.getvalue(s))
109
110 for i in range(len(values)):
111         v = values[i]
112         if v == None or v<0:
113                 v = 0
114         v = check_int(v)
115         values[i] = v
116
117 fs = form.getvalue('fs')
118 if fs==None:
119         fs=8
120 fs = check_int(fs)
121 if fs<0:
122         fs=8
123 if fs>20:
124         fs=20
125
126 conn = aQ.connect()
127 make_graph(ID,values,fs)
128 aQ.close(conn)
129
130