@@ -1583,7 +1583,19 @@ def wrap_decentralized_handler(fn: Callable) -> Callable:
15831583
15841584 Returns:
15851585 A wrapped function that can be used with component events.
1586+
1587+ Raises:
1588+ ValueError: If the event handler doesn't have at least one parameter (state).
15861589 """
1590+ # Get the signature of the function to determine parameter names
1591+ sig = inspect .signature (fn )
1592+ param_names = list (sig .parameters .keys ())
1593+
1594+ # The first parameter should be the state parameter
1595+ if not param_names :
1596+ raise ValueError (
1597+ f"Event handler { fn .__name__ } must have at least one parameter (state)"
1598+ )
15871599
15881600 # Create a wrapper function that doesn't require the state parameter
15891601 def wrapper (* args , ** kwargs ):
@@ -1599,12 +1611,22 @@ def wrapper(*args, **kwargs):
15991611 # Create an event spec with the provided arguments
16001612 arg_specs = []
16011613
1614+ # Skip the first parameter (state) when creating arg specs
1615+ param_offset = 1 # Skip the state parameter
1616+
16021617 for i , arg in enumerate (args ):
16031618 # Create a var for the arg
16041619 var_arg = Var .create (arg )
16051620
1621+ # Get the parameter name if available, otherwise use a generic name
1622+ param_name = (
1623+ param_names [i + param_offset ]
1624+ if i + param_offset < len (param_names )
1625+ else f"arg{ i } "
1626+ )
1627+
16061628 # Add the arg to the arg specs
1607- arg_specs .append ((Var .create_safe (f"arg { i } " ), var_arg ))
1629+ arg_specs .append ((Var .create_safe (param_name ), var_arg ))
16081630
16091631 for name , arg in kwargs .items ():
16101632 # Create a var for the arg
0 commit comments