Skip to content

Commit

Permalink
Make AiiDA ProcessNode a requirement of process tree nodes
Browse files Browse the repository at this point in the history
  • Loading branch information
edan-bainglass committed Jan 8, 2025
1 parent d05a863 commit b2a3489
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions src/aiidalab_qe/app/result/components/status/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,24 @@ def __init__(self, model: SimplifiedProcessTreeModel, **kwargs):
def render(self):
if self.rendered:
return
if self._model.has_process:
self._render()
else:
self.children = [ipw.HTML("Process node not yet available")]

def _on_process_change(self, _):
if not self.rendered:
self._render()
self._update()

def _on_monitor_counter_change(self, _):
self._update()

def _on_inspect(self, uuid):
self._model.clicked = None # ensure event is triggered when label is reclicked
self._model.clicked = uuid

def _render(self):
self.collapse_button = ipw.Button(
description="Collapse all",
button_style="warning",
Expand All @@ -59,16 +77,6 @@ def render(self):
self.trunk,
]

def _on_process_change(self, _):
self._update()

def _on_monitor_counter_change(self, _):
self._update()

def _on_inspect(self, uuid):
self._model.clicked = None # ensure event is triggered
self._model.clicked = uuid

def _update(self):
if self.rendered:
self.trunk.update()
Expand Down Expand Up @@ -112,11 +120,13 @@ class TreeNode(ipw.VBox):

def __init__(
self,
node,
level=0,
node: orm.ProcessNode,
level: int = 0,
on_inspect: t.Callable[[str], None] | None = None,
**kwargs,
):
if not (node and isinstance(node, orm.ProcessNode)):
raise ValueError("Process node required")
self.uuid = node.uuid
self.on_inspect = on_inspect
self._build_header(node, level)
Expand All @@ -126,15 +136,15 @@ def __init__(
)

@property
def process_node(self):
return orm.load_node(self.uuid)
def process_node(self) -> orm.ProcessNode:
return orm.load_node(self.uuid) # type: ignore

def update(self, node=None):
def update(self, node: orm.ProcessNode = None):
node = node or self.process_node
self.state.value = self._get_state(node)
self.emoji.value = self._get_emoji(self.state.value)

def _build_header(self, node, level):
def _build_header(self, node: orm.ProcessNode, level: int):
self.level = level
self.title = self._get_human_readable_title(node)
self.indentation = self._get_indentation(level)
Expand Down

0 comments on commit b2a3489

Please sign in to comment.