chiark / gitweb /
files that make graphs
authornaath <naath@chiark.greenend.org.uk>
Wed, 9 Apr 2014 08:43:36 +0000 (09:43 +0100)
committernaath <naath@chiark.greenend.org.uk>
Wed, 9 Apr 2014 08:43:36 +0000 (09:43 +0100)
cgiFiles/age.py [new file with mode: 0755]
cgiFiles/ageDeath.py [new file with mode: 0755]
cgiFiles/ancestorGraph.py [new file with mode: 0755]
cgiFiles/bigGraph.py [new file with mode: 0755]
cgiFiles/jointAncestorGraph.py [new file with mode: 0755]
cgiFiles/listAge.py [new file with mode: 0755]
cgiFiles/listAgeDeath.py [new file with mode: 0755]
cgiFiles/name.py [new file with mode: 0755]
cgiFiles/smallGraph.py [new file with mode: 0755]
cgiFiles/test.py [new file with mode: 0755]
familyTree/printAge.py [new file with mode: 0755]

diff --git a/cgiFiles/age.py b/cgiFiles/age.py
new file mode 100755 (executable)
index 0000000..dc888d4
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+# enable debugging
+import cgi
+import cgitb
+import sys
+import re
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion
+import everyPage
+
+cgitb.enable()
+
+[conn,form]=everyPage.top()
+
+age = form.getvalue('age')
+if age == None:
+       age = 20
+
+result = re.match('[-]{0,1}[0-9]{1,4}$', str(age))
+
+if result == None:
+       everyPage.bad()
+else:   
+       printMe  = askQuestion.people_had_child_at_age(age,'<br>')
+       if len(printMe)<10:
+               printMe =  'sorry, no data <br>'
+
+       everyPage.good(printMe)
+
+
+everyPage.bottom(conn)
diff --git a/cgiFiles/ageDeath.py b/cgiFiles/ageDeath.py
new file mode 100755 (executable)
index 0000000..3e7bcd7
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+# enable debugging
+import cgi
+import cgitb
+import sys
+import re
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion
+import everyPage
+
+cgitb.enable()
+
+[conn,form]=everyPage.top()
+
+age = form.getvalue('age')
+if age == None:
+       age = 20
+
+result = re.match('[-]{0,1}[0-9]{1,4}$', str(age))
+
+if result == None:
+       everyPage.bad()
+else:   
+       printMe  = askQuestion.people_died_at_age(age,'<br>')
+       if len(printMe)<10:
+               printMe =  'sorry, no data <br>'
+
+       everyPage.good(printMe)
+
+
+everyPage.bottom(conn)
diff --git a/cgiFiles/ancestorGraph.py b/cgiFiles/ancestorGraph.py
new file mode 100755 (executable)
index 0000000..a0e291d
--- /dev/null
@@ -0,0 +1,103 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+cgitb.enable()
+import sys
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import pygraph
+from pygraph.classes.graph import graph
+from pygraph.classes.digraph import digraph
+from pygraph.algorithms.searching import breadth_first_search
+from pygraph.readwrite.dot import write
+import gv
+import StringIO
+import askQuestion
+
+def add_quotes(s):
+       s = str(s)
+        return '\"'+s+'\"'
+
+def parents(ID,name,gr,attr,couples):
+
+       findParents = "SELECT Name,parentID FROM parents LEFT JOIN"\
+                        +" people ON people.id=parents.parentid"\
+                        +"  WHERE parents.id=?;"
+       
+       ps = ();
+       for row in askQuestion.run_query(findParents,(ID,)):
+               if row[0]!=None:
+                       thisN = row[0] + ' '+str(row[1])
+                       ps = ps + (thisN,)
+                       if not gr.has_node(thisN):
+                               gr.add_node(thisN,attr)
+                       if not gr.has_edge((thisN,name)):
+                               gr.add_edge((thisN,name))
+                       newName = thisN
+                       newID = row[1]
+                       [gr, couples] = \
+                       parents(newID,newName,gr,attr,couples)
+
+               else:
+                       thisN =  row[1] + ' p' + str(ID)
+                       if not gr.has_node(thisN):
+                               ps = ps + (thisN,)
+                               gr.add_node(thisN,attr)
+                               gr.add_edge((thisN,name))
+       if len(ps)==2:
+               if not gr.has_edge(ps):
+                       gr.add_edge(ps)
+                       gr.add_edge_attributes(ps,[('dir','none')])
+                       couples.append(ps)
+       return [gr, couples]
+
+def make_graph(ID,conn):
+       
+       # Graph creation
+       gr = digraph()
+       attr = [('fontsize',8)]
+       # Add nodes and edges
+
+       couples = [];
+       s = "SELECT name, id FROM people WHERE ID = ?;"
+       for row in askQuestion.run_query(s,(ID,)):
+               gr.add_node(row[0],attr)
+               newName = (row[0])
+               newID = row[1]
+
+
+       [gr,couples] = parents(newID,newName,gr,attr,couples)
+
+
+
+        #Draw as jpg
+       dot = write(gr)
+
+
+       dot = dot[:-2]
+
+        for couple in couples:
+               n1 = add_quotes(couple[0])
+               n2 = add_quotes(couple[1])
+                line = "\n{rank=same "+n1 + ' '\
+                        +n2 + "}"
+                dot = dot + line
+        dot = dot + '\n}'
+
+
+       gvv = gv.readstring(dot)
+       gv.layout(gvv,'dot')
+
+       format = 'jpg'
+       print "Content-type: image/" + format + "\n"
+       print gv.render(gvv,format)
+       askQuestion.close(conn)
+
+form = cgi.FieldStorage()
+
+ID = form.getvalue('id')
+
+conn = askQuestion.connect()
+make_graph(ID,conn)
+askQuestion.close(conn)
+
diff --git a/cgiFiles/bigGraph.py b/cgiFiles/bigGraph.py
new file mode 100755 (executable)
index 0000000..e5304e9
--- /dev/null
@@ -0,0 +1,92 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+import sys
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import pygraph
+from pygraph.classes.graph import graph
+from pygraph.classes.digraph import digraph
+from pygraph.algorithms.searching import breadth_first_search
+from pygraph.readwrite.dot import write
+import gv
+import StringIO
+import askQuestion
+
+def add_quotes(s):
+        s = str(s)
+        return '\"'+s+'\"'
+
+cgitb.enable()
+
+form = cgi.FieldStorage()
+conn = askQuestion.connect()
+
+famTree = askQuestion.list_people_parents()
+
+gr = digraph()
+
+couples = []
+
+attr = [('fontsize',8)]
+
+for i in range(len(famTree)):
+       self = famTree[i][0]
+       if not gr.has_node(self):
+               gr.add_node(self,attr)
+
+       for j in range(len(famTree[i][2])):
+               s = famTree[i][2][j]
+               ps = (self,s)
+               
+               if not gr.has_node(s):
+                       gr.add_node(s,attr)
+                       a =1 
+               if not gr.has_edge(ps):
+                       gr.add_edge(ps)
+                       a = ['dir','none']
+                       gr.add_edge_attribute(ps,a)
+                       couples.append(ps)
+
+       ps = ()
+       for j in range(len(famTree[i][1])):
+               p = famTree[i][1][j]
+               if p !='?':
+                       ps = ps + (str(p),)
+                       if not gr.has_node(p):
+                               gr.add_node(p,attr)
+                       if not gr.has_edge((p,self)):
+                               gr.add_edge((p,self))
+
+       if len(ps)==2 and not gr.has_edge(ps) \
+       and not gr.has_edge((ps[1],ps[0])):
+               gr.add_edge(ps)
+               a = ['dir','none']
+               gr.add_edge_attribute(ps,a)
+               couples.append(ps)
+               
+dot = write(gr)
+
+dot = write(gr)
+dot = dot[:-2]
+
+for couple in couples:
+       line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
+               +add_quotes(couple[1])+"}"
+
+        dot = dot + line
+
+dot = dot + '\n}'
+
+
+gvv = gv.readstring(dot)
+format='dot'
+gv.layout(gvv,format)
+
+format = "jpg"
+print "Content-type: image/" + format + "\n"
+print gv.render(gvv,format)
+
+#gv.render(gvv,'png','famTree.png')
+
+askQuestion.close(conn)
diff --git a/cgiFiles/jointAncestorGraph.py b/cgiFiles/jointAncestorGraph.py
new file mode 100755 (executable)
index 0000000..cbcdc1e
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+cgitb.enable()
+import sys
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import pygraph
+from pygraph.classes.graph import graph
+from pygraph.classes.digraph import digraph
+from pygraph.algorithms.searching import breadth_first_search
+from pygraph.readwrite.dot import write
+import gv
+import StringIO
+import askQuestion
+
+def parents(ID,name,gr,attr,startLevel,stopLevel):
+
+       findParents = "SELECT Name,parentID FROM parents LEFT JOIN"\
+                        +" people ON people.id=parents.parentid"\
+                        +"  WHERE parents.id=?;"
+
+       startLevel = startLevel + 1
+       if int(startLevel) == int(stopLevel)+1:
+               return gr
+
+       for row in askQuestion.run_query(findParents,(ID,)):
+               if row[0]!=None:
+                       thisN = row[0] + ' '+str(row[1])
+                       if not gr.has_node(thisN):
+                               gr.add_node(thisN,attr)
+                       if gr.has_edge((thisN,name)):
+                               return gr       
+                       gr.add_edge((thisN,name))
+                       newName = thisN
+                       newID = row[1]
+                       gr = parents(newID,newName,gr,attr,startLevel,stopLevel)
+
+               else:
+                       if not gr.has_node(row[1]):
+                               gr.add_node(row[1],attr)
+                               gr.add_edge((row[1],name))                      
+       return gr
+
+def make_graph(ID,ID2,LA,LB):
+       
+       # Graph creation
+       gr = digraph()
+       attr = [('fontsize',8)]
+       # Add nodes and edges
+
+       if int(LA)!=0:
+               s = "SELECT name, id FROM people WHERE ID = ?;"
+               for row in askQuestion.run_query(s,(ID,)):
+                       thisN = row[0]+' ' + str(row[1])
+                       gr.add_node(thisN,attr)
+                       newName = (thisN)
+                       newID = row[1]
+               gr = parents(newID,newName,gr,attr,0,LA)
+
+       if int(LB)!=0:
+               s = "SELECT name, id FROM people WHERE ID = ?;"
+               for row in askQuestion.run_query(s,(ID2,)):
+                       thisN = row[0] +' '+ str(row[1])
+                       gr.add_node(thisN,attr)
+                       newName = (thisN)
+                       newID = row[1]
+
+               gr = parents(newID,newName,gr,attr,0,LB)
+
+        #Draw as jpg
+       dot = write(gr)
+       gvv = gv.readstring(dot)
+       gv.layout(gvv,'dot')
+
+       format = 'jpg'
+       print "Content-type: image/" + format + "\n"
+       print gv.render(gvv,format)
+       askQuestion.close(conn)
+
+form = cgi.FieldStorage()
+
+ID = form.getvalue('id')
+ID2 = form.getvalue('id2')
+LA = form.getvalue('LA')
+LB = form.getvalue('LB')
+
+conn = askQuestion.connect()
+make_graph(ID,ID2,LA,LB)
+askQuestion.close(conn)
+
diff --git a/cgiFiles/listAge.py b/cgiFiles/listAge.py
new file mode 100755 (executable)
index 0000000..b0b4091
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+import sys
+import re
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion
+import everyPage
+
+[conn,form]=everyPage.top()
+
+result = 1
+if result == None:
+        everyPage.bad()
+else:   
+        printMe = askQuestion.count_age_at_child('<br>')
+        if len(printMe)<3:
+                printMe =  'sorry, no data <br>'
+
+        everyPage.good(printMe)
+
+
+everyPage.bottom(conn)
+
diff --git a/cgiFiles/listAgeDeath.py b/cgiFiles/listAgeDeath.py
new file mode 100755 (executable)
index 0000000..061314d
--- /dev/null
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+import sys
+import re
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion
+import everyPage
+
+[conn,form]=everyPage.top()
+cgitb.enable()
+result = 1
+if result == None:
+        everyPage.bad()
+else:   
+        printMe = askQuestion.count_age_at_death('<br>')
+        if len(printMe)<3:
+                printMe =  'sorry, no data <br>'
+
+        everyPage.good(printMe)
+
+
+everyPage.bottom(conn)
+
diff --git a/cgiFiles/name.py b/cgiFiles/name.py
new file mode 100755 (executable)
index 0000000..4f47ce7
--- /dev/null
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: UTF-8 -*-
+
+# enable debugging
+import cgi
+import cgitb
+import sys
+import re
+sys.path.append('/home/naath/familyTreeProject/familyTree')
+import askQuestion
+import everyPage
+
+cgitb.enable()
+
+[conn,form]=everyPage.top()
+
+name = form.getvalue('name')
+if name == None:
+       name = "Edward"
+
+result = re.match('[a-zA-z-%]*$', name)
+
+if result == None:
+       everyPage.bad()
+else:   
+       printMe  = askQuestion.people_with_name(name,'<br>')
+       if len(printMe)<10:
+               printMe =  'sorry, no data <br>'
+
+       everyPage.good(printMe)
+
+
+everyPage.bottom(conn)
diff --git a/cgiFiles/smallGraph.py b/cgiFiles/smallGraph.py
new file mode 100755 (executable)
index 0000000..eefee42
--- /dev/null
@@ -0,0 +1,102 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+
+import pygraph
+from pygraph.classes.graph import graph
+from pygraph.classes.digraph import digraph
+from pygraph.algorithms.searching import breadth_first_search
+from pygraph.readwrite.dot import write
+import gv
+import StringIO
+
+cgitb.enable()
+def add_quotes(s):
+        return '\"'+str(s)+'\"'
+
+
+def make_graph(Self,parents,children,otherparents,spouses):
+       # Graph creation
+       gr = digraph()
+
+       node_attr = [('fontsize',8)]
+
+       # Add nodes and edges
+       gr.add_node(Self,node_attr)
+
+
+       for p in parents:
+               if not gr.has_node(p):
+                       gr.add_node(p,node_attr)
+               if not gr.has_edge((p,Self)):
+                       gr.add_edge((p,Self))
+               
+       couples=[]
+       if len(parents)==2:
+               ps = (parents[0],parents[1])
+               if not gr.has_edge(ps):
+                       gr.add_edge(ps)
+                       attr = [('dir','none')]
+                       gr.add_edge_attributes(ps,attr)
+                       couples.append(ps)
+
+       for i in range(len(children)):
+               if not gr.has_node(children[i]):
+                       gr.add_node(children[i],node_attr)
+               if not gr.has_edge ((Self,children[i])):
+                       gr.add_edge((Self,children[i]))
+               if not gr.has_node(otherparents[i]):
+                       gr.add_node(otherparents[i],node_attr)
+               if not gr.has_edge((otherparents[i],children[i])):
+                       gr.add_edge((otherparents[i],children[i]))
+
+               
+               if not gr.has_edge((otherparents[i],Self)):
+                       e = (otherparents[i],Self)
+                       attr = [('dir','none')]
+                       gr.add_edge(e)
+                       gr.add_edge_attributes(e,attr)
+                       couples.append(e)
+
+       for s in spouses:
+               if not gr.has_node(s):
+                       gr.add_node(s,node_attr)
+               if not gr.has_edge((s,Self)):
+                       e = (s,Self)
+                       attr = [('dir','none')]
+                        gr.add_edge(e)
+                        gr.add_edge_attributes(e,attr)
+                        couples.append(e)
+
+
+
+        #Draw as jpg
+       dot = write(gr)
+       dot = dot[:-2]
+       
+       for couple in couples:
+               line = "\n{rank=same "+add_quotes(couple[0]) + ' '\
+                       +add_quotes(couple[1])+"}"
+
+               dot = dot + line
+
+       dot = dot + '\n}'
+       gvv = gv.readstring(dot)
+       gv.layout(gvv,'dot')
+
+       format = 'jpg'
+
+       print "Content-type: image/" + format + "\n"
+       print gv.render(gvv,format)
+
+form = cgi.FieldStorage()
+
+Self = form.getvalue('Self')
+p = form.getlist('p')
+c = form.getlist('c')
+op = form.getlist('op')
+s = form.getlist('s')
+
+make_graph(Self,p,c,op,s)
+
diff --git a/cgiFiles/test.py b/cgiFiles/test.py
new file mode 100755 (executable)
index 0000000..9e5daf3
--- /dev/null
@@ -0,0 +1,52 @@
+#!/usr/bin/python
+
+import cgi
+import cgitb
+
+import pygraph
+from pygraph.classes.graph import graph
+from pygraph.classes.digraph import digraph
+from pygraph.algorithms.searching import breadth_first_search
+from pygraph.readwrite.dot import write
+import gv
+import StringIO
+
+
+
+def make_graph(Self,parents,children,otherparents):
+       # Graph creation
+       gr = digraph()
+
+       # Add nodes and edges
+       gr.add_nodes([Self])
+
+       for p in parents:
+               gr.add_nodes([p])
+               gr.add_edge((p,Self))
+
+       for i in range(len(children)):
+               gr.add_nodes([children[i]])
+               gr.add_edge((Self,children[i]))
+               if not gr.has_node(otherparents[i]):
+                       gr.add_nodes([otherparents[i]])
+               gr.add_edge((otherparents[i],children[i]))
+
+
+
+
+        #Draw as PNG
+#      dot = write(gr)
+#      gvv = gv.readstring(dot)
+#      gv.layout(gvv,'dot')
+
+#      print "Content-type: image/png\n"
+#      print gv.render(gvv,'png')
+
+form = cgi.FieldStorage()
+
+Self = 'naath'
+p = ['Bob','Susan']
+c = ['Jane','Alice']
+op = ['Mary','Mary']
+
+make_graph(Self,p,c,op)
diff --git a/familyTree/printAge.py b/familyTree/printAge.py
new file mode 100755 (executable)
index 0000000..dc97d84
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/python
+
+import askQuestion
+import sys     
+
+
+conn = askQuestion.connect()
+
+
+if len(sys.argv) < 2:
+       o = askQuestion.people_had_child_at_age(20,'\n')
+else:   
+     for i in range(1,len(sys.argv)):
+       o = askQuestion.people_had_child_at_age(sys.argv[i],'\n')
+
+
+print o
+
+
+askQuestion.close(conn)