chiark / gitweb /
faff with graphs and searching
[familyTree.git] / cgiFiles / smallGraph.py
index 393d6dfd4c3261accf8e3b8dfa8e71006f49aed1..b1bc179300424b6183515f562f9764df88083d6c 100755 (executable)
@@ -8,44 +8,80 @@ sys.path.append('/home/naath/familyTreeProject/familyTree')
 import askQuestion as aQ
 cgitb.enable()
 
-
-#def make_graph(Self,parents,children,otherparents,spouses):
-def make_graph(ID):
-
-       d.start_dot()   
-
+def add_parents(ID,s,cl,pl,pos,os):
        Self = aQ.find_person(ID)[0]
-
-       d.add_highlight(Self)
        
        [parents, parentIDs,parentNames] = aQ.find_parents(ID)
 
-       countSame = 2;
-        for i in range(1,len(parents)):
-                if parents[i]==parents[i-1]:
-                        parents[1]=parents[1] + ' '+str(countSame)
-                        countSame = countSame +1
+       if s==0:
+               d.add_marriage(parents[0],parents[1],[Self],1)
+       
+       else:
+               for p in parentIDs:
+                       if p!=0:
+                               add_children(p,cl+1,os)
+       if pl>1:
+               for p in parentIDs:
+                       if p!=0:
+                               add_parents(p,s,cl,pl-1,pos,os)
+
+       if pos==1:
+               for p in parentIDs:
+                       if p!=0:
+                               add_spouses(p,os,cl)
+
+
+def add_children(ID,cl,os):
+       Self = aQ.find_person(ID)[0]
 
-        d.add_marriage(parents[0],parents[1],[Self],1)
 
-       [children,childrenID,childrenNames\
-               ,otherparents,otherparentsID,otherParentsNames\
-               ,childrenBorn] = \
+       [nodes,IDs,names,childrenBorn] = \
                aQ.find_children(ID)
        
-       for i in range(len(otherparents)):
-                c = children[i]
-                op = otherparents[i]
+       children=[]
+       for n in nodes:
+                c = n[0]
+               children.append(c)
+                op = n[1]
                 d.add_marriage(Self,op,[c],1)
-       
+
+        #d.subgraphs.append(children)
+
+       if cl>1:
+               for c in IDs:
+                       add_children(c[0],cl-1,os)
+                       add_spouses(c[0],os,cl-1)
+
+def add_spouses(ID,os,cl):
+       Self = aQ.find_person(ID)[0]
+
        [spouses,spousesID,spousesNames] = aQ.find_spouses(ID)
 
-       for i in range(len(spouses)):
-                s = spouses[i]
+       for s in spouses:
                 d.add_marriage(Self,s,[],1)
+       
+
+       if os==1:
+               for s in spousesID:
+                       if s!=0:
+                               add_spouses(s,0,cl)
+                               add_children(s,cl,os)
+
+def make_graph(ID,v,fs):
+       pl = v[0]
+       cl = v[1]
+       s = v[2]
+       os = v[3]
+       pos = v[4]
 
+       d.start_dot(fs) 
+       Self = aQ.find_person(ID)[0]
+
+       d.add_highlight(Self)
 
-        d.subgraphs.append(children)
+       add_parents(ID,s,cl,pl,pos,os)
+       add_children(ID,cl,os)
+       add_spouses(ID,os,cl)
 
        d.add_subgraphs()
        
@@ -53,11 +89,40 @@ def make_graph(ID):
                
        d.render_dot()
 
+def check_int(s):
+       try:
+               return int(s)
+       except ValueError:
+               return 1
 
 form = cgi.FieldStorage()
 
 ID = form.getvalue('ID')
 
+
+variables = ['pl', 'cl', 's', 'os', 'pos']
+values=[]
+for s in variables:
+       values.append(form.getvalue(s))
+
+for i in range(len(values)):
+       v = values[i]
+       if v == None:
+               v = 0
+       v = check_int(v)
+       if v<0:
+               v=0
+       values[i] = v
+
+fs = form.getvalue('fs')
+if fs==None:
+       fs=8
+fs = check_int(fs)
+if fs==1:
+       fs=8
+
 conn = aQ.connect()
-make_graph(ID)
+make_graph(ID,values,fs)
 aQ.close(conn)
+
+