new patch with small changes Jose
--
--- /home/jose/trabajos/dbfw2p/web2py/applications/welcome/controllers/appadmin.py 2012-12-03 23:40:06.000000000 -0300 +++ /home/jose/trabajos/dbfw2p/web2py/applications/modelografico/controllers/appadmin.py 2012-12-15 21:00:41.000000000 -0300 @@ -460,3 +460,54 @@ return dict(form=form, total=total, ram=ram, disk=disk, object_stats=hp != False) + + + +def table_template(table): + def f(x): + if x.type == 'string': + return x.length + elif x.type == 'id': + return B('pk') + elif x.type.find('reference') >= 0: + return B('fk') + else: + return ' ' + + header = '''<TR><TD COLSPAN="3" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="#FFA21F"><FONT FACE="Helvetica Bold" COLOR="white">%s</FONT></TD></TR>'''%table + + fields = [] + for field in db[table].fields: + fields.append( + ''' + <TR> + <TD ALIGN="LEFT" CELLPADDING="4" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Bold">%s</FONT></TD> + <TD ALIGN="LEFT" CELLPADDING="4" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica">%s</FONT></TD> + <TD ALIGN="CENTER" CELLPADDING="4" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica">%s</FONT></TD> + </TR> + '''%(db[table][field].name, db[table][field].type, f(db[table][field]))) + + return '''< <TABLE BGCOLOR="#F1F2AD" BORDER="1" CELLBORDER="0" CELLSPACING="0">%s %s</TABLE> >'''%(header, ' '.join(fields)) + + +def bg_graph_model(): + import pygraphviz as pgv + + A=pgv.AGraph(layout='dot', directed=True, strict=False, rankdir='LR') + for table in db.tables: + A.add_node(table, name=table, shape='plaintext', label=table_template(table)) + + for table in db.tables: + for field in db[table].fields: + f_type = db[table][field].type + if f_type.find('reference') >= 0: + referenced_table = f_type.split()[1] + n1 = A.get_node(table) + n2 = A.get_node(referenced_table) + A.add_edge(n1, n2, color="#4C4C4C", label='') + + A.layout() + return A.draw(format='png', prog='dot') + +def graph_model(): + return dict(databases=databases)