garantee order

This commit is contained in:
Will McGugan
2023-02-22 13:32:49 +00:00
parent dae686a693
commit 801051b70b
4 changed files with 25 additions and 23 deletions

View File

@@ -406,7 +406,7 @@ class Stylesheet:
) )
self.replace_rules(node, node_rules, animate=animate) self.replace_rules(node, node_rules, animate=animate)
component_classes = node._get_component_classes() component_classes = DOMNode._get_component_classes(type(node))
if component_classes: if component_classes:
old_component_styles = node._component_styles.copy() old_component_styles = node._component_styles.copy()
node._component_styles.clear() node._component_styles.clear()

View File

@@ -229,8 +229,8 @@ class DOMNode(MessagePump):
# Node bases are in reversed order so that the base class is lower priority # Node bases are in reversed order so that the base class is lower priority
return self._css_bases(self.__class__) return self._css_bases(self.__class__)
@classmethod @staticmethod
def _css_bases(cls, base: Type[DOMNode]) -> Iterable[Type[DOMNode]]: def _css_bases(base: Type[DOMNode]) -> Iterable[Type[DOMNode]]:
"""Get the DOMNode base classes, which inherit CSS. """Get the DOMNode base classes, which inherit CSS.
Args: Args:
@@ -317,8 +317,8 @@ class DOMNode(MessagePump):
return css_stack return css_stack
@classmethod @staticmethod
def _get_component_classes(cls) -> frozenset[str]: def _get_component_classes(node_type: type[DOMNode]) -> Iterable[str]:
"""Gets the component classes for this class and inherited from bases. """Gets the component classes for this class and inherited from bases.
Component classes are inherited from base classes, unless Component classes are inherited from base classes, unless
@@ -327,13 +327,13 @@ class DOMNode(MessagePump):
Returns: Returns:
A set with all the component classes available. A set with all the component classes available.
""" """
component_classes: set[str] = set() component_classes: list[str] = []
for base in cls._css_bases(cls): for base in DOMNode._css_bases(node_type):
component_classes.update(base.__dict__.get("COMPONENT_CLASSES", set())) component_classes.extend(base.__dict__.get("COMPONENT_CLASSES", ()))
if not base.__dict__.get("_inherit_component_classes", True): if not base.__dict__.get("_inherit_component_classes", True):
break break
return frozenset(component_classes) return sorted(component_classes)
@property @property
def parent(self) -> DOMNode | None: def parent(self) -> DOMNode | None:

View File

@@ -238,4 +238,6 @@ def test_disabled_widgets(snap_compare):
def test_focus_component_class(snap_compare): def test_focus_component_class(snap_compare):
assert snap_compare(SNAPSHOT_APPS_DIR / "focus_component_class.py", press=["tab"]) assert snap_compare(
SNAPSHOT_APPS_DIR / "focus_component_class.py", press=["tab", "_"]
)

View File

@@ -143,27 +143,27 @@ def test_component_classes_inheritance():
COMPONENT_CLASSES = {"f-1"} COMPONENT_CLASSES = {"f-1"}
node = DOMNode() node = DOMNode()
node_cc = node._get_component_classes() node_cc = DOMNode._get_component_classes(type(node))
a = A() a = A()
a_cc = a._get_component_classes() a_cc = DOMNode._get_component_classes(type(a))
b = B() b = B()
b_cc = b._get_component_classes() b_cc = DOMNode._get_component_classes(type(b))
c = C() c = C()
c_cc = c._get_component_classes() c_cc = DOMNode._get_component_classes(type(c))
d = D() d = D()
d_cc = d._get_component_classes() d_cc = DOMNode._get_component_classes(type(d))
e = E() e = E()
e_cc = e._get_component_classes() e_cc = DOMNode._get_component_classes(type(e))
f = F() f = F()
f_cc = f._get_component_classes() f_cc = DOMNode._get_component_classes(type(f))
assert node_cc == set() assert node_cc == []
assert a_cc == {"a-1", "a-2"} assert a_cc == ["a-1", "a-2"]
assert b_cc == {"b-1"} assert b_cc == ["b-1"]
assert c_cc == {"b-1", "c-1", "c-2"} assert c_cc == ["b-1", "c-1", "c-2"]
assert d_cc == c_cc assert d_cc == c_cc
assert e_cc == {"b-1", "c-1", "c-2", "e-1"} assert e_cc == ["b-1", "c-1", "c-2", "e-1"]
assert f_cc == {"f-1"} assert f_cc == ["f-1"]
@pytest.fixture @pytest.fixture