|
|
|
@ -39,6 +39,7 @@ def setcluster(cluster):
|
|
|
|
|
|
|
|
|
|
class Diagram:
|
|
|
|
|
__directions = ("TB", "BT", "LR", "RL")
|
|
|
|
|
__curvestyles = ("ortho", "curved")
|
|
|
|
|
__outformats = ("png", "jpg", "svg", "pdf")
|
|
|
|
|
|
|
|
|
|
# fmt: off
|
|
|
|
@ -78,6 +79,7 @@ class Diagram:
|
|
|
|
|
name: str = "",
|
|
|
|
|
filename: str = "",
|
|
|
|
|
direction: str = "LR",
|
|
|
|
|
curvestyle: str = "ortho",
|
|
|
|
|
outformat: str = "png",
|
|
|
|
|
show: bool = True,
|
|
|
|
|
graph_attr: dict = {},
|
|
|
|
@ -91,6 +93,7 @@ class Diagram:
|
|
|
|
|
:param filename: The output filename, without the extension (.png).
|
|
|
|
|
If not given, it will be generated from the name.
|
|
|
|
|
:param direction: Data flow direction. Default is 'left to right'.
|
|
|
|
|
:param curvestyle: Curve bending style. One of "ortho" or "curved".
|
|
|
|
|
:param outformat: Output file format. Default is 'png'.
|
|
|
|
|
:param show: Open generated image after save if true, just only save otherwise.
|
|
|
|
|
:param graph_attr: Provide graph_attr dot config attributes.
|
|
|
|
@ -117,6 +120,10 @@ class Diagram:
|
|
|
|
|
raise ValueError(f'"{direction}" is not a valid direction')
|
|
|
|
|
self.dot.graph_attr["rankdir"] = direction
|
|
|
|
|
|
|
|
|
|
if not self._validate_curvestyle(curvestyle):
|
|
|
|
|
raise ValueError(f'"{curvestyle}" is not a valid curvestyle')
|
|
|
|
|
self.dot.graph_attr["splines"] = curvestyle
|
|
|
|
|
|
|
|
|
|
if not self._validate_outformat(outformat):
|
|
|
|
|
raise ValueError(f'"{outformat}" is not a valid output format')
|
|
|
|
|
self.outformat = outformat
|
|
|
|
@ -151,6 +158,13 @@ class Diagram:
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def _validate_curvestyle(self, curvestyle: str) -> bool:
|
|
|
|
|
curvestyle = curvestyle.lower()
|
|
|
|
|
for v in self.__curvestyles:
|
|
|
|
|
if v == curvestyle:
|
|
|
|
|
return True
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
def _validate_outformat(self, outformat: str) -> bool:
|
|
|
|
|
outformat = outformat.lower()
|
|
|
|
|
for v in self.__outformats:
|
|
|
|
|