@ -40,7 +40,7 @@ def setcluster(cluster):
class Diagram :
class Diagram :
__directions = ( " TB " , " BT " , " LR " , " RL " )
__directions = ( " TB " , " BT " , " LR " , " RL " )
__curvestyles = ( " ortho " , " curved " )
__curvestyles = ( " ortho " , " curved " )
__outformats = ( " png " , " jpg " , " svg " , " pdf " )
__outformats = ( " png " , " jpg " , " svg " , " pdf " , " dot " )
# fmt: off
# fmt: off
_default_graph_attrs = {
_default_graph_attrs = {
@ -127,8 +127,13 @@ class Diagram:
raise ValueError ( f ' " { curvestyle } " is not a valid curvestyle ' )
raise ValueError ( f ' " { curvestyle } " is not a valid curvestyle ' )
self . dot . graph_attr [ " splines " ] = curvestyle
self . dot . graph_attr [ " splines " ] = curvestyle
if not self . _validate_outformat ( outformat ) :
if isinstance ( outformat , list ) :
raise ValueError ( f ' " { outformat } " is not a valid output format ' )
for one_format in outformat :
if not self . _validate_outformat ( one_format ) :
raise ValueError ( f ' " { one_format } " is not a valid output format ' )
else :
if not self . _validate_outformat ( outformat ) :
raise ValueError ( f ' " { outformat } " is not a valid output format ' )
self . outformat = outformat
self . outformat = outformat
# Merge passed in attributes
# Merge passed in attributes
@ -155,25 +160,13 @@ class Diagram:
return self . dot . pipe ( format = " png " )
return self . dot . pipe ( format = " png " )
def _validate_direction ( self , direction : str ) - > bool :
def _validate_direction ( self , direction : str ) - > bool :
direction = direction . upper ( )
return direction . upper ( ) in self . __directions
for v in self . __directions :
if v == direction :
return True
return False
def _validate_curvestyle ( self , curvestyle : str ) - > bool :
def _validate_curvestyle ( self , curvestyle : str ) - > bool :
curvestyle = curvestyle . lower ( )
return curvestyle . lower ( ) in self . __curvestyles
for v in self . __curvestyles :
if v == curvestyle :
return True
return False
def _validate_outformat ( self , outformat : str ) - > bool :
def _validate_outformat ( self , outformat : str ) - > bool :
outformat = outformat . lower ( )
return outformat . lower ( ) in self . __outformats
for v in self . __outformats :
if v == outformat :
return True
return False
def node ( self , nodeid : str , label : str , * * attrs ) - > None :
def node ( self , nodeid : str , label : str , * * attrs ) - > None :
""" Create a new node. """
""" Create a new node. """
@ -188,7 +181,11 @@ class Diagram:
self . dot . subgraph ( dot )
self . dot . subgraph ( dot )
def render ( self ) - > None :
def render ( self ) - > None :
self . dot . render ( format = self . outformat , view = self . show , quiet = True )
if isinstance ( self . outformat , list ) :
for one_format in self . outformat :
self . dot . render ( format = one_format , view = self . show , quiet = True )
else :
self . dot . render ( format = self . outformat , view = self . show , quiet = True )
class Cluster :
class Cluster :
@ -263,9 +260,8 @@ class Cluster:
def _validate_direction ( self , direction : str ) :
def _validate_direction ( self , direction : str ) :
direction = direction . upper ( )
direction = direction . upper ( )
for v in self . __directions :
if direction in self . __directions :
if v == direction :
return True
return True
return False
return False
def node ( self , nodeid : str , label : str , * * attrs ) - > None :
def node ( self , nodeid : str , label : str , * * attrs ) - > None :