From cd63297fe477cd3edbe6c860891e6049c9d64797 Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 28 Jun 2023 15:32:49 -0700 Subject: [PATCH] state: Leading underscore functions are not backend vars (#1268) --- reflex/state.py | 2 ++ tests/test_state.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/reflex/state.py b/reflex/state.py index cc66dd088..e2b0d212d 100644 --- a/reflex/state.py +++ b/reflex/state.py @@ -10,6 +10,7 @@ import traceback import urllib.parse from abc import ABC from collections import defaultdict +from types import FunctionType from typing import ( Any, AsyncIterator, @@ -197,6 +198,7 @@ class State(Base, ABC, extra=pydantic.Extra.allow): for name, value in cls.__dict__.items() if types.is_backend_variable(name) and name not in cls.inherited_backend_vars + and not isinstance(value, FunctionType) } cls.backend_vars = {**cls.inherited_backend_vars, **cls.new_backend_vars} diff --git a/tests/test_state.py b/tests/test_state.py index cb12f62c0..d91bb19be 100644 --- a/tests/test_state.py +++ b/tests/test_state.py @@ -1087,3 +1087,18 @@ def test_computed_var_depends_on_parent_non_cached(): IS_HYDRATED: False, } assert counter == 6 + + +def test_backend_method(): + """A method with leading underscore should be callable from event handler.""" + + class BackendMethodState(State): + def _be_method(self): + return True + + def handler(self): + assert self._be_method() + + bms = BackendMethodState() + bms.handler() + assert bms._be_method()