Skip to content

Commit 8f36c3e

Browse files
committed
microoptimizations
1 parent 2148966 commit 8f36c3e

File tree

4 files changed

+18
-13
lines changed

4 files changed

+18
-13
lines changed

src/textual/app.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,11 @@ def is_dom_root(self) -> bool:
776776
"""Is this a root node (i.e. the App)?"""
777777
return True
778778

779+
@property
780+
def is_attached(self) -> bool:
781+
"""Is this node linked to the app through the DOM?"""
782+
return True
783+
779784
@property
780785
def debug(self) -> bool:
781786
"""Is debug mode enabled?"""

src/textual/dom.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -746,8 +746,7 @@ def css_path_nodes(self) -> list[DOMNode]:
746746
append = result.append
747747

748748
node: DOMNode = self
749-
while isinstance(node._parent, DOMNode):
750-
node = node._parent
749+
while isinstance((node := node._parent), DOMNode):
751750
append(node)
752751
return result[::-1]
753752

@@ -1078,12 +1077,11 @@ def ancestors_with_self(self) -> list[DOMNode]:
10781077
Returns:
10791078
A list of nodes.
10801079
"""
1081-
nodes: list[MessagePump | None] = []
1080+
nodes: list[MessagePump | None] = [self]
10821081
add_node = nodes.append
10831082
node: MessagePump | None = self
1084-
while node is not None:
1083+
while (node := node._parent) is not None:
10851084
add_node(node)
1086-
node = node._parent
10871085
return cast("list[DOMNode]", nodes)
10881086

10891087
@property
@@ -1093,7 +1091,12 @@ def ancestors(self) -> list[DOMNode]:
10931091
Returns:
10941092
A list of nodes.
10951093
"""
1096-
return self.ancestors_with_self[1:]
1094+
nodes: list[MessagePump | None] = []
1095+
add_node = nodes.append
1096+
node: MessagePump | None = self
1097+
while (node := node._parent) is not None:
1098+
add_node(node)
1099+
return cast("list[DOMNode]", nodes)
10971100

10981101
@property
10991102
def displayed_children(self) -> list[Widget]:

src/textual/message_pump.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,6 @@ def app(self) -> "App[object]":
247247
@property
248248
def is_attached(self) -> bool:
249249
"""Is this node linked to the app through the DOM?"""
250-
if self.is_dom_root:
251-
return True
252250
node: MessagePump | None = self
253251
while (node := node._parent) is not None:
254252
if node.is_dom_root:

src/textual/walk.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,13 @@ def walk_depth_first(
6565
if with_root and isinstance(root, check_type):
6666
yield root
6767
while stack:
68-
node = next(stack[-1], None)
69-
if node is None:
68+
if (node := next(stack[-1], None)) is None:
7069
pop()
7170
else:
7271
if isinstance(node, check_type):
7372
yield node
74-
if node.children:
75-
push(iter(node.children))
73+
if children := node._nodes:
74+
push(iter(children))
7675

7776

7877
@overload
@@ -127,4 +126,4 @@ def walk_breadth_first(
127126
node = popleft()
128127
if isinstance(node, check_type):
129128
yield node
130-
extend(node.children)
129+
extend(node._nodes)

0 commit comments

Comments
 (0)