示例#1
0
 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,
         )
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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