chiark / gitweb /
b1bc179300424b6183515f562f9764df88083d6c
[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] = 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 def make_graph(ID,v,fs):
71         pl = v[0]
72         cl = v[1]
73         s = v[2]
74         os = v[3]
75         pos = v[4]
76
77         d.start_dot(fs) 
78         Self = aQ.find_person(ID)[0]
79
80         d.add_highlight(Self)
81
82         add_parents(ID,s,cl,pl,pos,os)
83         add_children(ID,cl,os)
84         add_spouses(ID,os,cl)
85
86         d.add_subgraphs()
87         
88         d.end_dot()
89                 
90         d.render_dot()
91
92 def check_int(s):
93         try:
94                 return int(s)
95         except ValueError:
96                 return 1
97
98 form = cgi.FieldStorage()
99
100 ID = form.getvalue('ID')
101
102
103 variables = ['pl', 'cl', 's', 'os', 'pos']
104 values=[]
105 for s in variables:
106         values.append(form.getvalue(s))
107
108 for i in range(len(values)):
109         v = values[i]
110         if v == None:
111                 v = 0
112         v = check_int(v)
113         if v<0:
114                 v=0
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==1:
122         fs=8
123
124 conn = aQ.connect()
125 make_graph(ID,values,fs)
126 aQ.close(conn)
127
128