Mercurial > p > roundup > code
view scripts/schema_diagram.py @ 5312:a4fe76fba54a
issue2550957: Duplicate emails (with patch).
Bcc and cc users passed to nosymessage are not properly recorded.
This results in duplicate emails. Patch by Trent Gamblin (trentgg).
Applied by and test added by John Rouillard.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 07 Nov 2017 20:58:48 -0500 |
| parents | d56b7fc64923 |
| children | 64b05e24dbd8 |
line wrap: on
line source
#! /usr/bin/python # # Schema diagram generator contributed by Stefan Seefeld of the fresco # project http://www.fresco.org/. # # It generates a 'dot file' that is then fed into the 'dot' # tool (http://www.graphviz.org) to generate a graph: # # %> ./schema.py # %> dot -Tps schema.dot -o schema.ps # %> gv schema.ps # import sys import roundup.instance # open the instance instance = roundup.instance.open(sys.argv[1]) db = instance.open() # diagram preamble print 'digraph schema {' print 'size="8,6"' print 'node [shape="record" bgcolor="#ffe4c4" style=filled]' print 'edge [taillabel="1" headlabel="1" dir=back arrowtail=ediamond]' # get all the classes types = db.classes.keys() # one record node per class for i in range(len(types)): print 'node%d [label=\"{%s|}"]'%(i, types[i]) # now draw in the relations for name in db.classes.keys(): type = db.classes[name] attributes = type.getprops() for a in attributes.keys(): attribute = attributes[a] if isinstance(attribute, roundup.hyperdb.Link): print 'node%d -> node%d [label=%s]'%(types.index(name), types.index(attribute.classname), a) elif isinstance(attribute, roundup.hyperdb.Multilink): print 'node%d -> node%d [taillabel="*" label=%s]'%(types.index(name), types.index(attribute.classname), a) # all done print '}'
