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
-~----------~----~----~----~------~----~------~--~---

Reply via email to