better errors in state.py (#3929)

This commit is contained in:
Thomas Brandého 2024-09-16 23:33:42 +02:00 committed by Masen Furer
parent 9497a89704
commit 6e1550b89f
No known key found for this signature in database
GPG Key ID: B0008AD22B3B3A95
2 changed files with 25 additions and 6 deletions

View File

@ -64,7 +64,10 @@ from reflex.event import (
) )
from reflex.utils import console, format, path_ops, prerequisites, types from reflex.utils import console, format, path_ops, prerequisites, types
from reflex.utils.exceptions import ( from reflex.utils.exceptions import (
ComputedVarShadowsBaseVars,
ComputedVarShadowsStateVar,
DynamicRouteArgShadowsStateVar, DynamicRouteArgShadowsStateVar,
EventHandlerShadowsBuiltInStateMethod,
ImmutableStateError, ImmutableStateError,
LockExpiredError, LockExpiredError,
) )
@ -755,7 +758,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
"""Check for shadow methods and raise error if any. """Check for shadow methods and raise error if any.
Raises: Raises:
NameError: When an event handler shadows an inbuilt state method. EventHandlerShadowsBuiltInStateMethod: When an event handler shadows an inbuilt state method.
""" """
overridden_methods = set() overridden_methods = set()
state_base_functions = cls._get_base_functions() state_base_functions = cls._get_base_functions()
@ -769,7 +772,7 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
overridden_methods.add(method.__name__) overridden_methods.add(method.__name__)
for method_name in overridden_methods: for method_name in overridden_methods:
raise NameError( raise EventHandlerShadowsBuiltInStateMethod(
f"The event handler name `{method_name}` shadows a builtin State method; use a different name instead" f"The event handler name `{method_name}` shadows a builtin State method; use a different name instead"
) )
@ -778,11 +781,11 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
"""Check for shadow base vars and raise error if any. """Check for shadow base vars and raise error if any.
Raises: Raises:
NameError: When a computed var shadows a base var. ComputedVarShadowsBaseVars: When a computed var shadows a base var.
""" """
for computed_var_ in cls._get_computed_vars(): for computed_var_ in cls._get_computed_vars():
if computed_var_._js_expr in cls.__annotations__: if computed_var_._js_expr in cls.__annotations__:
raise NameError( raise ComputedVarShadowsBaseVars(
f"The computed var name `{computed_var_._js_expr}` shadows a base var in {cls.__module__}.{cls.__name__}; use a different name instead" f"The computed var name `{computed_var_._js_expr}` shadows a base var in {cls.__module__}.{cls.__name__}; use a different name instead"
) )
@ -791,14 +794,14 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
"""Check for shadow computed vars and raise error if any. """Check for shadow computed vars and raise error if any.
Raises: Raises:
NameError: When a computed var shadows another. ComputedVarShadowsStateVar: When a computed var shadows another.
""" """
for name, cv in cls.__dict__.items(): for name, cv in cls.__dict__.items():
if not is_computed_var(cv): if not is_computed_var(cv):
continue continue
name = cv._js_expr name = cv._js_expr
if name in cls.inherited_vars or name in cls.inherited_backend_vars: if name in cls.inherited_vars or name in cls.inherited_backend_vars:
raise NameError( raise ComputedVarShadowsStateVar(
f"The computed var name `{cv._js_expr}` shadows a var in {cls.__module__}.{cls.__name__}; use a different name instead" f"The computed var name `{cv._js_expr}` shadows a var in {cls.__module__}.{cls.__name__}; use a different name instead"
) )

View File

@ -91,3 +91,19 @@ class EventFnArgMismatch(ReflexError, TypeError):
class DynamicRouteArgShadowsStateVar(ReflexError, NameError): class DynamicRouteArgShadowsStateVar(ReflexError, NameError):
"""Raised when a dynamic route arg shadows a state var.""" """Raised when a dynamic route arg shadows a state var."""
class ComputedVarShadowsStateVar(ReflexError, NameError):
"""Raised when a computed var shadows a state var."""
class ComputedVarShadowsBaseVars(ReflexError, NameError):
"""Raised when a computed var shadows a base var."""
class EventHandlerShadowsBuiltInStateMethod(ReflexError, NameError):
"""Raised when an event handler shadows a built-in state method."""
class GeneratedCodeHasNoFunctionDefs(ReflexError):
"""Raised when refactored code generated with flexgen has no functions defined."""