From 101b0cfd5f0dc439d64bc75b90616e7ea263e2cd Mon Sep 17 00:00:00 2001 From: Denys Vitali Date: Thu, 25 Nov 2021 16:35:29 +0100 Subject: [PATCH] feat: add support for dot (GraphViz) output --- diagrams/__init__.py | 2 +- tests/test_diagram.py | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/diagrams/__init__.py b/diagrams/__init__.py index 6968bc4a..90e5a5e0 100644 --- a/diagrams/__init__.py +++ b/diagrams/__init__.py @@ -40,7 +40,7 @@ def setcluster(cluster): class Diagram: __directions = ("TB", "BT", "LR", "RL") __curvestyles = ("ortho", "curved") - __outformats = ("png", "jpg", "svg", "pdf") + __outformats = ("png", "jpg", "svg", "pdf", "dot") # fmt: off _default_graph_attrs = { diff --git a/tests/test_diagram.py b/tests/test_diagram.py index cc5567b0..df7e7bfa 100644 --- a/tests/test_diagram.py +++ b/tests/test_diagram.py @@ -46,7 +46,7 @@ class DiagramTest(unittest.TestCase): def test_validate_outformat(self): # Normal output formats. - for fmt in ("png", "jpg", "svg", "pdf"): + for fmt in ("png", "jpg", "svg", "pdf", "dot"): Diagram(outformat=fmt) # Invalid output formats. @@ -184,6 +184,27 @@ class ClusterTest(unittest.TestCase): self.assertEqual(nodes << node1, node1) +class SimpleDiagramTest(unittest.TestCase): + def test_simple_diagram_1(self): + from diagrams.aws.compute import EC2 + from diagrams.aws.database import RDS + from diagrams.aws.network import ELB + + file_name = "some-name" + + with Diagram(name=file_name, outformat="dot", show=False): + ELB("lb") >> [EC2("worker1"), + EC2("worker2"), + EC2("worker3"), + EC2("worker4"), + EC2("worker5")] >> RDS("events") + try: + os.open(f"{file_name}.dot", flags=os.O_RDONLY) + except FileNotFoundError: + assert False + os.remove(f"{file_name}.dot") + + class EdgeTest(unittest.TestCase): def setUp(self): self.name = "edge_test"