Explorar o código

[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
Khaleel Al-Adhami hai 10 meses
pai
achega
5b927f18d0
Modificáronse 2 ficheiros con 36 adicións e 4 borrados
  1. 6 0
      reflex/experimental/vars/__init__.py
  2. 30 4
      reflex/experimental/vars/base.py

+ 6 - 0
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

+ 30 - 4
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."""