improve state hierarchy validation, drop old testing special case (#3894)
This commit is contained in:
parent
477e1dece9
commit
fd13e559c6
@ -269,13 +269,12 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
||||
"`connect_error_component` is deprecated, use `overlay_component` instead"
|
||||
)
|
||||
super().__init__(**kwargs)
|
||||
base_state_subclasses = BaseState.__subclasses__()
|
||||
|
||||
# Special case to allow test cases have multiple subclasses of rx.BaseState.
|
||||
if not is_testing_env() and len(base_state_subclasses) > 1:
|
||||
# Only one Base State class is allowed.
|
||||
if not is_testing_env() and BaseState.__subclasses__() != [State]:
|
||||
# Only rx.State is allowed as Base State subclass.
|
||||
raise ValueError(
|
||||
"rx.BaseState cannot be subclassed multiple times. use rx.State instead"
|
||||
"rx.BaseState cannot be subclassed directly. Use rx.State instead"
|
||||
)
|
||||
|
||||
if "breakpoints" in self.style:
|
||||
|
@ -495,17 +495,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
|
||||
if cls.get_name() in set(
|
||||
c.get_name() for c in parent_state.class_subclasses
|
||||
):
|
||||
if is_testing_env():
|
||||
# Clear existing subclass with same name when app is reloaded via
|
||||
# utils.prerequisites.get_app(reload=True)
|
||||
parent_state.class_subclasses = set(
|
||||
c
|
||||
for c in parent_state.class_subclasses
|
||||
if c.get_name() != cls.get_name()
|
||||
)
|
||||
else:
|
||||
# During normal operation, subclasses cannot have the same name, even if they are
|
||||
# defined in different modules.
|
||||
# This should not happen, since we have added module prefix to state names in #3214
|
||||
raise StateValueError(
|
||||
f"The substate class '{cls.get_name()}' has been defined multiple times. "
|
||||
"Shadowing substate classes is not allowed."
|
||||
|
Loading…
Reference in New Issue
Block a user