orchestrata_tools.backcompat.diagram_generator

Reference › orchestrata_tools › backcompat › diagram_generator

This module is a command-line wrapper that keeps the old diagram_generator.py interface alive. Nothing imports it, and tests/test_orchestrata_tools_backcompat.py covers it.

main loads the AST file and builds an index, then chooses a generator from the flags. --class NAME, --module PATH and --full use ClassDiagramGenerator from class_diagram for one class with its subclasses, the classes of one module, or the largest classes. With no flag it uses ModuleDiagramGenerator from module_diagram. The Mermaid text is printed or written to the --output file.

At a glance

Source src/orchestrata_tools/backcompat/diagram_generator.py
Lines of code 53
Classes 0
Functions 1
Imports (internal) orchestrata_tools.diagram, orchestrata_tools.parser
Imported by none
Tests that import it tests/test_orchestrata_tools_backcompat.py

Class diagram

No classes; see Functions.

Dependency diagram

Dependency diagram orchestrata_tools.backcompat.diagram_generator

API

Functions

Function Signature Summary
main main(argv: list[str] | None = None) -> int

Source

Permalink: https://gitlab.com/MSamy/orchestrata-ultimate-architecture/-/blob/a4cbc2bdf/src/orchestrata_tools/backcompat/diagram_generator.py

#!/usr/bin/env python3
"""Backward-compatible wrapper for diagram_generator.py."""

from __future__ import annotations

import argparse
import sys

from orchestrata_tools.diagram import (
    ClassDiagramGenerator,
    ModuleDiagramGenerator,
)
from orchestrata_tools.parser import ASTIndex, JSONASTLoader


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(description="Mermaid Diagram Generator")
    parser.add_argument("--ast", default="plans/ast-ultimate.json")
    parser.add_argument("--output", "-o")
    parser.add_argument("--class", dest="class_name", help="Generate class diagram")
    parser.add_argument("--module", help="Generate module diagram")
    parser.add_argument("--full", action="store_true", help="Full class diagram")
    args = parser.parse_args(argv)

    ast = JSONASTLoader().load(args.ast)
    index = ASTIndex(ast)

    gen: ClassDiagramGenerator | ModuleDiagramGenerator
    if args.class_name:
        gen = ClassDiagramGenerator(index)
        diagram = gen.generate_for_class(args.class_name)
    elif args.module:
        gen = ClassDiagramGenerator(index)
        diagram = gen.generate_for_module(args.module)
    elif args.full:
        gen = ClassDiagramGenerator(index)
        diagram = gen.generate_full()
    else:
        gen = ModuleDiagramGenerator(index)
        diagram = gen.generate()

    output = diagram.render()
    if args.output:
        with open(args.output, "w") as f:
            f.write(output)
    else:
        print(output)

    return 0


if __name__ == "__main__":
    sys.exit(main())