From 5b927f18d0bf18c22009a7a39b47e5cac054baac Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Fri, 12 Jul 2024 17:42:08 -0400 Subject: [PATCH] [REF-3222] define new JS-type var classes (#3668) * define new JS-type var classes * add docstring * get rid of dataclass definitions and export all new vars * order imports in the correct way * only hash once --- reflex/experimental/vars/__init__.py | 6 +++++ reflex/experimental/vars/base.py | 34 ++++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/reflex/experimental/vars/__init__.py b/reflex/experimental/vars/__init__.py index 5f99f2292..3327e9119 100644 --- a/reflex/experimental/vars/__init__.py +++ b/reflex/experimental/vars/__init__.py @@ -1,3 +1,9 @@ """Experimental Immutable-Based Var System.""" +from .base import ArrayVar as ArrayVar +from .base import BooleanVar as BooleanVar +from .base import FunctionVar as FunctionVar from .base import ImmutableVar as ImmutableVar +from .base import NumberVar as NumberVar +from .base import ObjectVar as ObjectVar +from .base import StringVar as StringVar diff --git a/reflex/experimental/vars/base.py b/reflex/experimental/vars/base.py index 3dc1f0d7c..f1b2288b0 100644 --- a/reflex/experimental/vars/base.py +++ b/reflex/experimental/vars/base.py @@ -100,7 +100,7 @@ class ImmutableVar(Var): kwargs.get("_var_data", self._var_data), merge_var_data ), ) - return ImmutableVar(**field_values) + return type(self)(**field_values) @classmethod def create( @@ -161,7 +161,7 @@ class ImmutableVar(Var): ) name = name if isinstance(name, str) else format.json_dumps(name) - return ImmutableVar( + return cls( _var_name=name, _var_type=type_, _var_data=_var_data, @@ -204,7 +204,33 @@ class ImmutableVar(Var): Returns: The formatted var. """ - _global_vars[hash(self)] = self + hashed_var = hash(self) + + _global_vars[hashed_var] = self # Encode the _var_data into the formatted output for tracking purposes. - return f"{REFLEX_VAR_OPENING_TAG}{hash(self)}{REFLEX_VAR_CLOSING_TAG}{self._var_name}" + return f"{REFLEX_VAR_OPENING_TAG}{hashed_var}{REFLEX_VAR_CLOSING_TAG}{self._var_name}" + + +class StringVar(ImmutableVar): + """Base class for immutable string vars.""" + + +class NumberVar(ImmutableVar): + """Base class for immutable number vars.""" + + +class BooleanVar(ImmutableVar): + """Base class for immutable boolean vars.""" + + +class ObjectVar(ImmutableVar): + """Base class for immutable object vars.""" + + +class ArrayVar(ImmutableVar): + """Base class for immutable array vars.""" + + +class FunctionVar(ImmutableVar): + """Base class for immutable function vars."""