@@ -225,8 +225,20 @@ def __call__(self, *args: Any) -> EventSpec:
225225 EventHandlerValueError: If the given Var name is not a str
226226 NotImplementedError: If the setter for the given Var is async
227227 """
228+ from reflex .config import get_config
228229 from reflex .utils .exceptions import EventHandlerValueError
229230
231+ config = get_config ()
232+ if config .state_auto_setters is None :
233+ console .deprecate (
234+ feature_name = "state_auto_setters defaulting to True" ,
235+ reason = "The default value will be changed to False in a future release. Set state_auto_setters explicitly or define setters explicitly. "
236+ f"Used { self .state_cls .__name__ } .setvar without defining it." ,
237+ deprecation_version = "0.8.9" ,
238+ removal_version = "0.9.0" ,
239+ dedupe = True ,
240+ )
241+
230242 if args :
231243 if not isinstance (args [0 ], str ):
232244 msg = f"Var name must be passed as a string, got { args [0 ]!r} "
@@ -1036,7 +1048,7 @@ def _init_var(cls, name: str, prop: Var):
10361048 )
10371049 raise VarTypeError (msg )
10381050 cls ._set_var (name , prop )
1039- if cls .is_user_defined () and get_config ().state_auto_setters :
1051+ if cls .is_user_defined () and get_config ().state_auto_setters is not False :
10401052 cls ._create_setter (name , prop )
10411053 cls ._set_default_value (name , prop )
10421054
@@ -1096,19 +1108,22 @@ def _set_var(cls, name: str, prop: Var):
10961108 setattr (cls , name , prop )
10971109
10981110 @classmethod
1099- def _create_event_handler (cls , fn : Any ):
1111+ def _create_event_handler (
1112+ cls , fn : Any , event_handler_cls : type [EventHandler ] = EventHandler
1113+ ):
11001114 """Create an event handler for the given function.
11011115
11021116 Args:
11031117 fn: The function to create an event handler for.
1118+ event_handler_cls: The event handler class to use.
11041119
11051120 Returns:
11061121 The event handler.
11071122 """
11081123 # Check if function has stored event_actions from decorator
11091124 event_actions = getattr (fn , "_rx_event_actions" , {})
11101125
1111- return EventHandler (
1126+ return event_handler_cls (
11121127 fn = fn , state_full_name = cls .get_full_name (), event_actions = event_actions
11131128 )
11141129
@@ -1125,9 +1140,34 @@ def _create_setter(cls, name: str, prop: Var):
11251140 name: The name of the var.
11261141 prop: The var to create a setter for.
11271142 """
1143+ from reflex .config import get_config
1144+
1145+ config = get_config ()
1146+ _create_event_handler_kwargs = {}
1147+
1148+ if config .state_auto_setters is None :
1149+
1150+ class EventHandlerDeprecatedSetter (EventHandler ):
1151+ def __call__ (self , * args , ** kwargs ):
1152+ console .deprecate (
1153+ feature_name = "state_auto_setters defaulting to True" ,
1154+ reason = "The default value will be changed to False in a future release. Set state_auto_setters explicitly or define setters explicitly. "
1155+ f"Used { setter_name } in { cls .__name__ } without defining it." ,
1156+ deprecation_version = "0.8.9" ,
1157+ removal_version = "0.9.0" ,
1158+ dedupe = True ,
1159+ )
1160+ return super ().__call__ (* args , ** kwargs )
1161+
1162+ _create_event_handler_kwargs ["event_handler_cls" ] = (
1163+ EventHandlerDeprecatedSetter
1164+ )
1165+
11281166 setter_name = Var ._get_setter_name_for_name (name )
11291167 if setter_name not in cls .__dict__ :
1130- event_handler = cls ._create_event_handler (prop ._get_setter (name ))
1168+ event_handler = cls ._create_event_handler (
1169+ prop ._get_setter (name ), ** _create_event_handler_kwargs
1170+ )
11311171 cls .event_handlers [setter_name ] = event_handler
11321172 setattr (cls , setter_name , event_handler )
11331173
0 commit comments