Update to make is look more UML-is:
#!/usr/bin/env python
import elixir, model, inspect
from model import *
classes = [m for m in model.__dict__.values() if inspect.isclass(m)
and issubclass(m, Entity) and m.__name__ != 'Entity' ]
print('digraph G {')
print('node [shape=plaintext]')
#print('edge [arrowsize=0.5 fontsize=9]')
print('edge [arrowsize=0.25 fontsize=11 fontcolor=blue]')
for c in classes:
manytoones = [f for f in c.__dict__.values() if f.__class__ ==
elixir.relationships.ManyToOne]
onetomanys = [f for f in c.__dict__.values() if f.__class__ ==
elixir.relationships.OneToMany]
onetoones = [f for f in c.__dict__.values() if f.__class__ ==
elixir.relationships.OneToOne]
manytomanys = [f for f in c.__dict__.values() if f.__class__ ==
elixir.relationships.ManyToMany]
fields = [f for f in c.__dict__.values() if f.__class__ ==
elixir.fields.Field]
fieldstr = '<tr><td align="left">' + '</td></tr><tr><td
align="left">'.join(["+%s(%s)"%(f.name, f.type.__name__) for f in
fields]) + "</td></tr>"
relstr = ''.join(['<tr><td align="left" port="%s">%s</td></tr>'%
(f.name, f.name) for f in manytoones + onetomanys + onetoones +
manytomanys])
if relstr == '':
relstr = '<tr><td></td></tr>'
print('%s [label=< \
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"
CELLPADDING="0"> \
<TR CELLBORDER="1" CELLSPACING="0" CELLPADDING="0"
border="1"><TD border="1" bgcolor="lightblue">%s</TD></TR> \
<TR><TD> <table BORDER="0" CELLBORDER="0" >%s</table> </
TD></TR> \
<TR><TD> <table BORDER="0" CELLBORDER="0" >%s</table> </
TD></TR> \
</TABLE>>]; \
'%(c.__name__, c.__name__, fieldstr, relstr))
for c2 in manytoones:
#print('%s -> %s [headlabel="%s" taillabel="%s" label="%s"]'%
(c.__name__, c2.of_kind, '1', '*', c2.name))
print('%s : %s -> %s [headlabel="%s" taillabel="%s"]'%
(c.__name__, c2.name , c2.of_kind, '1', '*'))
for c2 in onetomanys:
#print('%s -> %s [headlabel="%s" taillabel="%s" label="%s"]'%
(c.__name__, c2.of_kind, '*', '1', c2.name))
print('%s : %s -> %s [headlabel="%s" taillabel="%s"]'%
(c.__name__, c2.name , c2.of_kind, '*', '1'))
for c2 in onetoones:
#print('%s -> %s [headlabel="%s" taillabel="%s" label="%s"]'%
(c.__name__, c2.of_kind, '1', '1', c2.name))
print('%s : %s -> %s [headlabel="%s" taillabel="%s"]'%
(c.__name__, c2.name , c2.of_kind, '1', '1'))
for c2 in manytomanys:
#print('%s -> %s [headlabel="%s" taillabel="%s" label="%s"]'%
(c.__name__, c2.of_kind, '*', '*', c2.name))
print('%s : %s -> %s [headlabel="%s" taillabel="%s"]'%
(c.__name__, c2.name , c2.of_kind, '*', '*'))
print('}')
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"SQLElixir" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlelixir?hl=en
-~----------~----~----~----~------~----~------~--~---