From: naath Date: Wed, 9 Apr 2014 08:43:36 +0000 (+0100) Subject: files that make graphs X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~naath/git?a=commitdiff_plain;h=61fdfd94278dbe68fa1e3fe83dfb268d12fecd9f;p=familyTree.git files that make graphs --- diff --git a/cgiFiles/age.py b/cgiFiles/age.py new file mode 100755 index 0000000..dc888d4 --- /dev/null +++ b/cgiFiles/age.py @@ -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,'
') + if len(printMe)<10: + printMe = 'sorry, no data
' + + everyPage.good(printMe) + + +everyPage.bottom(conn) diff --git a/cgiFiles/ageDeath.py b/cgiFiles/ageDeath.py new file mode 100755 index 0000000..3e7bcd7 --- /dev/null +++ b/cgiFiles/ageDeath.py @@ -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,'
') + if len(printMe)<10: + printMe = 'sorry, no data
' + + everyPage.good(printMe) + + +everyPage.bottom(conn) diff --git a/cgiFiles/ancestorGraph.py b/cgiFiles/ancestorGraph.py new file mode 100755 index 0000000..a0e291d --- /dev/null +++ b/cgiFiles/ancestorGraph.py @@ -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 index 0000000..e5304e9 --- /dev/null +++ b/cgiFiles/bigGraph.py @@ -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 index 0000000..cbcdc1e --- /dev/null +++ b/cgiFiles/jointAncestorGraph.py @@ -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 index 0000000..b0b4091 --- /dev/null +++ b/cgiFiles/listAge.py @@ -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('
') + if len(printMe)<3: + printMe = 'sorry, no data
' + + everyPage.good(printMe) + + +everyPage.bottom(conn) + diff --git a/cgiFiles/listAgeDeath.py b/cgiFiles/listAgeDeath.py new file mode 100755 index 0000000..061314d --- /dev/null +++ b/cgiFiles/listAgeDeath.py @@ -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('
') + if len(printMe)<3: + printMe = 'sorry, no data
' + + everyPage.good(printMe) + + +everyPage.bottom(conn) + diff --git a/cgiFiles/name.py b/cgiFiles/name.py new file mode 100755 index 0000000..4f47ce7 --- /dev/null +++ b/cgiFiles/name.py @@ -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,'
') + if len(printMe)<10: + printMe = 'sorry, no data
' + + everyPage.good(printMe) + + +everyPage.bottom(conn) diff --git a/cgiFiles/smallGraph.py b/cgiFiles/smallGraph.py new file mode 100755 index 0000000..eefee42 --- /dev/null +++ b/cgiFiles/smallGraph.py @@ -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 index 0000000..9e5daf3 --- /dev/null +++ b/cgiFiles/test.py @@ -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 index 0000000..dc97d84 --- /dev/null +++ b/familyTree/printAge.py @@ -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)