Add graph, analyzers, and exporters modules
Some checks failed
CI / test (push) Failing after 50s
CI / build (push) Has been skipped

This commit is contained in:
2026-02-02 02:40:26 +00:00
parent 50aa49073a
commit c466de18a6

60
src/exporters/png.py Normal file
View File

@@ -0,0 +1,60 @@
import subprocess
from pathlib import Path
from src.graph.builder import GraphBuilder
from src.exporters.dot import DOTExporter
class PNGExporter:
def __init__(self, graph_builder: GraphBuilder):
self.graph_builder = graph_builder
self.dot_exporter = DOTExporter(graph_builder)
def export(
self,
output_path: Path,
layout: str = "dot",
rankdir: str = "TB",
format: str = "png",
) -> None:
dot_content = self.dot_exporter.get_string(layout=layout, rankdir=rankdir)
self._render_graph(dot_content, output_path, format)
def export_to_svg(self, output_path: Path, layout: str = "dot", rankdir: str = "TB") -> None:
dot_content = self.dot_exporter.get_string(layout=layout, rankdir=rankdir)
self._render_graph(dot_content, output_path, "svg")
def _render_graph(self, dot_content: str, output_path: Path, format: str) -> None:
try:
subprocess.run(
["dot", f"-T{format}", "-o", str(output_path)],
input=dot_content,
capture_output=True,
text=True,
check=True,
)
except FileNotFoundError:
raise RuntimeError(
"Graphviz is not installed. Please install it with: "
"apt-get install graphviz (Ubuntu) or brew install graphviz (macOS)"
)
except subprocess.CalledProcessError as e:
raise RuntimeError(f"Graphviz rendering failed: {e.stderr}")
def preview(self, layout: str = "dot") -> None:
dot_content = self.dot_exporter.get_string(layout=layout)
try:
result = subprocess.run(
["dot", "-Tpng"],
input=dot_content,
capture_output=True,
check=True,
)
print(f"PNG preview generated ({len(result.stdout)} bytes)")
except FileNotFoundError:
print("Graphviz not installed for preview")
def get_available_layouts(self) -> list[str]:
return ["dot", "neato", "fdp", "sfdp", "twopi", "circo"]