Skip to content

Commit 9dec01f

Browse files
fix dynamic route vars silently shadow all other vars
1 parent 911c2af commit 9dec01f

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

reflex/state.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,7 @@ def setup_dynamic_args(cls, args: dict[str, str]):
989989
Args:
990990
args: a dict of args
991991
"""
992+
cls._check_overwritten_dynamic_args(args)
992993

993994
def argsingle_factory(param):
994995
@ComputedVar
@@ -1019,6 +1020,24 @@ def inner_func(self) -> List:
10191020
# Reinitialize dependency tracking dicts.
10201021
cls._init_var_dependency_dicts()
10211022

1023+
@classmethod
1024+
def _check_overwritten_dynamic_args(cls, args: dict[str, str]):
1025+
"""Check if dynamic args are shadowing existing vars. Recursively checks all child states.
1026+
1027+
Args:
1028+
args: a dict of args
1029+
1030+
Raises:
1031+
NameError: If a dynamic arg is shadowing an existing var.
1032+
"""
1033+
for arg in args:
1034+
if arg in cls.vars:
1035+
raise NameError(
1036+
f"Dynamic route arg '{arg}' is shadowing an existing var in {cls.__module__}.{cls.__name__}"
1037+
)
1038+
for substate in cls.get_substates():
1039+
substate._check_overwritten_dynamic_args(args)
1040+
10221041
def __getattribute__(self, name: str) -> Any:
10231042
"""Get the state var.
10241043

0 commit comments

Comments
 (0)