def write_classes(self, diagram: ClassDiagram) -> None: """Write a class diagram.""" # sorted to get predictable (hence testable) results for obj in sorted(diagram.objects, key=lambda x: x.title): obj.fig_id = obj.node.qname() type_ = NodeType.INTERFACE if obj.shape == "interface" else NodeType.CLASS self.printer.emit_node(obj.fig_id, type_=type_, properties=self.get_class_properties(obj)) # inheritance links for rel in diagram.get_relationships("specialization"): self.printer.emit_edge( rel.from_object.fig_id, rel.to_object.fig_id, type_=EdgeType.INHERITS, ) # implementation links for rel in diagram.get_relationships("implements"): self.printer.emit_edge( rel.from_object.fig_id, rel.to_object.fig_id, type_=EdgeType.IMPLEMENTS, ) # generate associations for rel in diagram.get_relationships("association"): self.printer.emit_edge( rel.from_object.fig_id, rel.to_object.fig_id, label=rel.name, type_=EdgeType.ASSOCIATION, )
def visit_project(self, node): """visit an pyreverse.utils.Project node create a diagram definition for packages """ mode = self.config.mode if len(node.modules) > 1: self.pkgdiagram = PackageDiagram('packages %s' % node.name, mode) else: self.pkgdiagram = None self.classdiagram = ClassDiagram('classes %s' % node.name, mode)
def visit_project(self, node: Project) -> None: """visit a pyreverse.utils.Project node create a diagram definition for packages """ mode = self.config.mode if len(node.modules) > 1: self.pkgdiagram: Optional[PackageDiagram] = PackageDiagram( f"packages {node.name}", mode) else: self.pkgdiagram = None self.classdiagram = ClassDiagram(f"classes {node.name}", mode)
def class_diagram(self, project, klass): """return a class diagram definition for the given klass and its related klasses """ self.classdiagram = ClassDiagram(klass, self.config.mode) if len(project.modules) > 1: module, klass = klass.rsplit('.', 1) module = project.get_module(module) else: module = project.modules[0] klass = klass.split('.')[-1] klass = next(module.ilookup(klass)) anc_level, ass_level = self._get_levels() self.extract_classes(klass, anc_level, ass_level) return self.classdiagram