[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
This commit is contained in:
Khaleel Al-Adhami 2024-07-12 17:42:08 -04:00 committed by GitHub
parent b04a7dab84
commit 5b927f18d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 4 deletions

View File

@ -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

View File

@ -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."""