summaryrefslogtreecommitdiff
path: root/pyreverse/writer.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyreverse/writer.py')
-rw-r--r--pyreverse/writer.py49
1 files changed, 27 insertions, 22 deletions
diff --git a/pyreverse/writer.py b/pyreverse/writer.py
index dd00850..d4b9937 100644
--- a/pyreverse/writer.py
+++ b/pyreverse/writer.py
@@ -44,30 +44,33 @@ class DiagramWriter(object):
def write_packages(self, diagram):
"""write a package diagram"""
- for obj in diagram.modules():
- label = self.get_title(obj)
- self.printer.emit_node(obj.fig_id, label=label, shape='box')
+ # sorted to get predictable (hence testable) results
+ for i, obj in enumerate(sorted(diagram.modules(), key=lambda x: x.title)):
+ self.printer.emit_node(i, label=self.get_title(obj), shape='box')
+ obj.fig_id = i
# package dependencies
- for rel in diagram.relationships.get('depends', ()):
+ for rel in diagram.get_relationships('depends'):
self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id,
**self.pkg_edges)
def write_classes(self, diagram):
"""write a class diagram"""
- for obj in diagram.objects:
- self.printer.emit_node(obj.fig_id, **self.get_values(obj) )
+ # sorted to get predictable (hence testable) results
+ for i, obj in enumerate(sorted(diagram.objects, key=lambda x: x.title)):
+ self.printer.emit_node(i, **self.get_values(obj))
+ obj.fig_id = i
# inheritance links
- for rel in diagram.relationships.get('specialization', ()):
+ for rel in diagram.get_relationships('specialization'):
self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id,
- **self.inh_edges)
+ **self.inh_edges)
# implementation links
- for rel in diagram.relationships.get('implements', ()):
+ for rel in diagram.get_relationships('implements'):
self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id,
- **self.imp_edges)
+ **self.imp_edges)
# generate associations
- for rel in diagram.relationships.get('association', ()):
+ for rel in diagram.get_relationships('association'):
self.printer.emit_edge(rel.from_object.fig_id, rel.to_object.fig_id,
- label=rel.name, **self.ass_edges)
+ label=rel.name, **self.ass_edges)
def set_printer(self, file_name, basename):
"""set printer"""
@@ -92,10 +95,11 @@ class DotWriter(DiagramWriter):
def __init__(self, config):
styles = [dict(arrowtail='none', arrowhead="open"),
- dict(arrowtail = "none", arrowhead='empty'),
- dict(arrowtail="node", arrowhead='empty', style='dashed'),
+ dict(arrowtail='none', arrowhead='empty'),
+ dict(arrowtail='node', arrowhead='empty', style='dashed'),
dict(fontcolor='green', arrowtail='none',
- arrowhead='diamond', style='solid') ]
+ arrowhead='diamond', style='solid'),
+ ]
DiagramWriter.__init__(self, config, styles)
def set_printer(self, file_name, basename):
@@ -114,17 +118,17 @@ class DotWriter(DiagramWriter):
The label contains all attributes and methods
"""
- label = obj.title
+ label = obj.title
if obj.shape == 'interface':
- label = u"«interface»\\n%s" % label
+ label = u'«interface»\\n%s' % label
if not self.config.only_classnames:
- label = r"%s|%s\l|" % (label, r"\l".join(obj.attrs) )
+ label = r'%s|%s\l|' % (label, r'\l'.join(obj.attrs))
for func in obj.methods:
label = r'%s%s()\l' % (label, func.name)
label = '{%s}' % label
if is_exception(obj.node):
- return dict(fontcolor="red", label=label, shape="record")
- return dict(label=label, shape="record")
+ return dict(fontcolor='red', label=label, shape='record')
+ return dict(label=label, shape='record')
def close_graph(self):
"""print the dot graph into <file_name>"""
@@ -142,7 +146,8 @@ class VCGWriter(DiagramWriter):
dict(arrowstyle='solid', backarrowstyle='none',
linestyle='dotted', backarrowsize=10),
dict(arrowstyle='solid', backarrowstyle='none',
- textcolor='green') ]
+ textcolor='green'),
+ ]
DiagramWriter.__init__(self, config, styles)
def set_printer(self, file_name, basename):
@@ -177,7 +182,7 @@ class VCGWriter(DiagramWriter):
methods = [func.name for func in obj.methods]
# box width for UML like diagram
maxlen = max(len(name) for name in [obj.title] + methods + attrs)
- line = "_" * (maxlen + 2)
+ line = '_' * (maxlen + 2)
label = r'%s\n\f%s' % (label, line)
for attr in attrs:
label = r'%s\n\f08%s' % (label, attr)