From 73c4364072301b0d5f391d82779aac874e2fcd88 Mon Sep 17 00:00:00 2001 From: naath Date: Sun, 13 Apr 2014 19:18:47 +0100 Subject: [PATCH] graph faffing, now knows who's king --- cgiFiles/bigGraph.py | 11 ++++---- cgiFiles/jointAncestorGraph.py | 38 +++----------------------- cgiFiles/make_dot.py | 49 +++++++++++++++++++++++++++++----- familyTree/askQuestion.py | 20 +++++++++++--- familyTree/notes | 3 +++ 5 files changed, 71 insertions(+), 50 deletions(-) diff --git a/cgiFiles/bigGraph.py b/cgiFiles/bigGraph.py index c98d294..9ec77f9 100755 --- a/cgiFiles/bigGraph.py +++ b/cgiFiles/bigGraph.py @@ -4,7 +4,7 @@ import cgi import cgitb import sys sys.path.append('/home/naath/familyTreeProject/familyTree') -import askQuestion +import askQuestion as aQ import make_dot as d def add_quotes(s): @@ -14,16 +14,16 @@ def add_quotes(s): cgitb.enable() form = cgi.FieldStorage() -conn = askQuestion.connect() +conn = aQ.connect() -famTree = askQuestion.list_people_parents() +famTree = aQ.list_people_parents() d.start_dot(8) for i in range(len(famTree)): #for i in range(100): self = famTree[i][0] - d.add_person(self) + d.add_person(self) ps = [] for j in range(len(famTree[i][1])): @@ -39,7 +39,6 @@ for i in range(len(famTree)): s = famTree[i][2][j] ps = (self,s) - d.add_person(s) d.add_marriage(self,s,[],0) d.add_subgraph(ps) @@ -47,4 +46,4 @@ d.add_subgraphs() d.end_dot() d.render_dot() -askQuestion.close(conn) +aQ.close(conn) diff --git a/cgiFiles/jointAncestorGraph.py b/cgiFiles/jointAncestorGraph.py index 7fdadd0..c700ff0 100755 --- a/cgiFiles/jointAncestorGraph.py +++ b/cgiFiles/jointAncestorGraph.py @@ -8,30 +8,6 @@ sys.path.append('/home/naath/familyTreeProject/familyTree') import make_dot as d import askQuestion as aQ -def add_parents(ID,name,startLevel,stopLevel): - - startLevel = startLevel + 1 - if int(startLevel) == int(stopLevel)+1: - return - - pair=[] - [parents, parentIDs,parentNames] = aQ.find_parents(ID) - - pair = [] - for i in range(len(parents)): - newName = parents[i] - if parentIDs[i]!=0: - newID = parentIDs[i] - if not d.has_node(newName): - d.add_person(newName) - add_parents(newID,newName,\ - startLevel,stopLevel) - else: - d.add_person(newName) - pair.append(newName) - - d.add_marriage(pair[0], pair[1],[name],1) - def find_oneside_path(ID,start,stop): global myP global myC @@ -110,17 +86,11 @@ def make_graph(ID,ID2,LA,LB): d.start_dot(8) done = 0 - find_path(ID,ID2,LA,LB) + for tID in [ID, ID2]: + [Self, selfID, selfName] = aQ.find_person(tID) + d.add_highlight(Self) -# if int(LA)!=0: -# [Self, selfID, selfName] = aQ.find_person(ID) -# d.add_highlight(Self) -# add_parents(selfID,Self,0,LA) -# -# if int(LB)!=0: -# [Self, selfID, selfName] = aQ.find_person(ID2) -# d.add_highlight(Self) -# add_parents(selfID,Self,0,LB) + find_path(ID,ID2,LA,LB) d.add_subgraphs() d.end_dot() diff --git a/cgiFiles/make_dot.py b/cgiFiles/make_dot.py index 8006a79..abf3071 100755 --- a/cgiFiles/make_dot.py +++ b/cgiFiles/make_dot.py @@ -4,6 +4,10 @@ import cgi import cgitb import gv import re +import sys +sys.path.append('/home/naath/familyTreeProject/familyTree') +import askQuestion as aQ + cgitb.enable() def add_quotes(s): @@ -105,6 +109,7 @@ def add_subgraphs(): def end_dot(): global dot + dot = dot + "}" def start_dot(fs): @@ -117,16 +122,35 @@ def start_dot(fs): edges=[] cNodes={} dot = "digraph G{\n" - dot = dot + "ranksep = 0.5 nodesep = 0\n" + dot = dot + "ranksep = 0.2 nodesep = 0\n" subgraphs=[] set_attr(fs) def add_highlight(name): - add_node(name,highlight_attr) + global dot -def add_person(name): - add_node(name,person_attr) + add_person(name) + dot = dot +'\n'\ + 'subgraph clusterhl {'+add_quotes(name)+';\n' + for a in highlight_attr: + dot = dot + a[0] + '=' +a[1] +';\n' + dot = dot + '}' + +def add_person(name): + try: + k=aQ.isKing(name) + except: + k=0 + ln = name.replace(', ','\\n') + ln = ln.replace(',','\\n') + ln = ln.replace(' ','\\n') + myLabel = '"'+str(ln)+'"' + + if k==1: + add_node(name,king_attr+[('label',myLabel)]) + else: + add_node(name,person_attr+[('label',myLabel)]) def add_spot(name): add_node(name,spot_attr) @@ -134,6 +158,7 @@ def add_spot(name): def set_attr(fs): global person_attr global highlight_attr + global king_attr global spot_attr global edge_attr global invis_attr @@ -143,9 +168,14 @@ def set_attr(fs): global debug_attr global debug_edge_attr zero_size = [('width','0'),('height','0')] - person_attr = [('fontsize',str(fs)),('shape','plaintext')] + zero_size - highlight_attr = person_attr + \ - [('fontcolor','red'),('shape','box'),('color','red')] + person_attr = [('fontsize',str(fs))]+\ + [('shape','plaintext'),('margin','0.1'),\ + ('style','filled'),('fillcolor','white')] +\ + zero_size + highlight_attr = \ + [('shape','box'),('color','red'),('style','filled')] + king_attr = person_attr +\ + [('fontcolor','purple4'),('shape','house'),('color','purple4')] debug_attr = person_attr + [('fontcolor','green')] spot_attr = [('shape','point')] + zero_size edge_attr = [('len','0'),('arrowsize','0.5')] @@ -167,6 +197,11 @@ def attr_string(attr): return attr_str def render_dot(): + + f = open('tempfile','w') + f.write(dot) + f.close + gvv = gv.readstring(dot) gv.layout(gvv,'dot') diff --git a/familyTree/askQuestion.py b/familyTree/askQuestion.py index ecf810a..a5a6b30 100755 --- a/familyTree/askQuestion.py +++ b/familyTree/askQuestion.py @@ -4,6 +4,7 @@ import sqlite3 import findYear from string import Template import cgi +import re global link_Template link_Template= Template(\ @@ -735,6 +736,19 @@ def find_person(ID): selfName = row[1] selfID = row[2] return [Self, selfID,selfName] +def isKing(ID): + ID = int(ID.split(',')[-1]) + s= "SELECT style FROM styles WHERE ID=?" + t = (ID,) + + k = 0 + for row in run_query(s,t): + a=re.match('.*King',row[0]) + b=re.match('.*Queen',row[0]) + if a!=None or b!=None: + k=1 + + return k def find_parents(ID): s = "SELECT name, parentID"\ @@ -753,7 +767,7 @@ def find_parents(ID): pID = row[1] pN = row[0] else: - p = row[1] + ',p ' + str(ID) + p = row[1] + ',p' + str(ID) pID = 0 pN = row[1] parents.append(p) @@ -786,7 +800,7 @@ def find_spouses(ID): sID = row[1] sN = row[0] elif row[1] !='': - s=row[1] + ",s " +str(ID) + s=row[1] + ",s" +str(ID) sID = 0 sN = row[1] if row[1] !='': @@ -828,7 +842,7 @@ def find_children(ID): opID = row[2] opN = row[3] else: - op = row[2] + ',s ' + str(ID) + op = row[2] + ',s' + str(ID) opID = 0 opN = row[2] diff --git a/familyTree/notes b/familyTree/notes index 553a123..37f583b 100644 --- a/familyTree/notes +++ b/familyTree/notes @@ -15,5 +15,8 @@ see especially Edith of Mercia Sigehelm (163) was NOT MARRIED TO Prince Edward (162) + Check cousin marriages against: http://en.wikipedia.org/wiki/List_of_coupled_cousins#Royalty + +Fulk DID NOT marry Henry IV! -- 2.30.2