Skip to content

Commit ac9fd78

Browse files
committed
Better cache key
1 parent cc5fee4 commit ac9fd78

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/textual/css/stylesheet.py

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -439,11 +439,30 @@ def apply(
439439
rule_attributes: defaultdict[str, list[tuple[Specificity6, object]]]
440440
rule_attributes = defaultdict(list)
441441

442+
rules_map = self.rules_map
443+
444+
# Discard rules which are not applicable early
445+
limit_rules = {
446+
rule
447+
for name in rules_map.keys() & node._selector_names
448+
for rule in rules_map[name]
449+
}
450+
rules = list(filter(limit_rules.__contains__, reversed(self.rules)))
451+
452+
node._has_hover_style = any("hover" in rule.pseudo_classes for rule in rules)
453+
node._has_focus_within = any(
454+
"focus-within" in rule.pseudo_classes for rule in rules
455+
)
456+
442457
cache_key: tuple | None
443458
if cache is not None:
444459
cache_key = (
445460
node._parent,
446-
node._id,
461+
(
462+
None
463+
if node._id is None
464+
else (node._id if f"#{node._id}" in rules_map else None)
465+
),
447466
node.classes,
448467
node.pseudo_classes,
449468
node._css_type_name,
@@ -459,22 +478,6 @@ def apply(
459478
_check_rule = self._check_rule
460479
css_path_nodes = node.css_path_nodes
461480

462-
rules_map = self.rules_map
463-
464-
# Discard rules which are not applicable early
465-
limit_rules = {
466-
rule
467-
for name in rules_map.keys() & node._selector_names
468-
for rule in rules_map[name]
469-
}
470-
rules = list(filter(limit_rules.__contains__, reversed(self.rules)))
471-
472-
# Collect the rules defined in the stylesheet
473-
node._has_hover_style = any("hover" in rule.pseudo_classes for rule in rules)
474-
node._has_focus_within = any(
475-
"focus-within" in rule.pseudo_classes for rule in rules
476-
)
477-
478481
# Rules that may be set to the special value `initial`
479482
initial: set[str] = set()
480483
# Rules in DEFAULT_CSS set to the special value `initial`

0 commit comments

Comments
 (0)