Source code for lighttree.node

import uuid
from typing import Optional, Any, Tuple
from dataclasses import dataclass

NodeId = str


[docs]@dataclass class Node: identifier: NodeId keyed: bool = True accept_children: bool = True repr_: Optional[str] = None data: Any = None
[docs] def line_repr(self, depth: int, **kwargs: Any) -> Tuple[str, str]: """Control how node is displayed in tree representation. First returned string is how node is represented on left, second string is how node is represented on right. MyTree ├── one OneEnd │ └── two twoEnd └── three threeEnd """ if self.repr_ is not None: return self.repr_, "" if not self.accept_children: if hasattr(self.data, "__str__"): return str(self.data), "" return "", "" if self.keyed: return "{}", "" return "[]", ""
[docs]class AutoIdNode(Node): def __init__( self, identifier: Optional[NodeId] = None, keyed: bool = True, accept_children: bool = True, repr_: Optional[str] = None, data: Any = None, ): self._auto_generated_id: bool identifier_: NodeId if identifier is None: identifier_ = str(uuid.uuid4()) self._auto_generated_id = True else: identifier_ = identifier self._auto_generated_id = False super(AutoIdNode, self).__init__( identifier=identifier_, keyed=keyed, accept_children=accept_children, repr_=repr_, data=data, )