"""Based class to interface DAG backends."""fromabcimportABC,abstractmethodfromtypingimportAny,Literal,Optionalfrom..constantsimportDictStrStr
[docs]classDagBase(ABC):"""DAG base class."""def__init__(self,standalone_cluster:bool=False)->None:self._dag:Any=Noneself.nodes:list[dict[str,Optional[str]]]=[]self.edges:list[tuple[str,str]]=[]self.edges_custom:list[tuple[str,str,DictStrStr]]=[]self.standalone_trees:list[dict[str,Optional[str]]]=[]self.standalone_blobs:list[dict[str,Optional[str]]]=[]self.standalone_cluster=standalone_cluster
[docs]@abstractmethoddefedge(self,node1_name:str,node2_name:str,**attrs:str)->None:"""Add an edge."""
[docs]@abstractmethoddefnode(# pylint: disable=too-many-positional-argumentsself,name:str,label:str,color:str,tooltip:Optional[str]=None,URL:Optional[str]=None,standalone_kind:Optional[Literal["tree","blob"]]=None,**attrs:str,)->None:"""Add a node."""
[docs]@abstractmethoddefbuild(# pylint: disable=too-many-positional-argumentsself,format:str,# pylint: disable=redefined-builtinnode_attr:DictStrStr,edge_attr:DictStrStr,dag_attr:DictStrStr,filename:str,cluster_params:DictStrStr,)->None:"""Build the graph."""
[docs]@abstractmethoddefrender(self)->None:"""Render the graph."""