|
@@ -33,6 +33,9 @@ class State(Base, ABC):
|
|
|
# Vars inherited by the parent state.
|
|
|
inherited_vars: ClassVar[Dict[str, Var]] = {}
|
|
|
|
|
|
+ # Backend vars that are never sent to the client.
|
|
|
+ backend_vars: ClassVar[Dict[str, Any]] = {}
|
|
|
+
|
|
|
# The parent state.
|
|
|
parent_state: Optional[State] = None
|
|
|
|
|
@@ -117,6 +120,12 @@ class State(Base, ABC):
|
|
|
if parent_state is not None:
|
|
|
cls.inherited_vars = parent_state.vars
|
|
|
|
|
|
+ cls.backend_vars = {
|
|
|
+ name: value
|
|
|
+ for name, value in cls.__dict__.items()
|
|
|
+ if utils.is_backend_variable(name)
|
|
|
+ }
|
|
|
+
|
|
|
# Set the base and computed vars.
|
|
|
skip_vars = set(cls.inherited_vars) | {
|
|
|
"parent_state",
|
|
@@ -409,6 +418,8 @@ class State(Base, ABC):
|
|
|
# Get the var from the parent state.
|
|
|
if name in super().__getattribute__("inherited_vars"):
|
|
|
return getattr(super().__getattribute__("parent_state"), name)
|
|
|
+ elif name in super().__getattribute__("backend_vars"):
|
|
|
+ return super().__getattribute__("backend_vars").__getitem__(name)
|
|
|
return super().__getattribute__(name)
|
|
|
|
|
|
def __setattr__(self, name: str, value: Any):
|
|
@@ -425,6 +436,10 @@ class State(Base, ABC):
|
|
|
setattr(self.parent_state, name, value)
|
|
|
return
|
|
|
|
|
|
+ if utils.is_backend_variable(name):
|
|
|
+ self.backend_vars.__setitem__(name, value)
|
|
|
+ return
|
|
|
+
|
|
|
# Set the attribute.
|
|
|
super().__setattr__(name, value)
|
|
|
|