Browse Source

fix: Determine var type from value. (#4143)

abulvenz 7 months ago
parent
commit
87648af3ee
2 changed files with 7 additions and 1 deletions
  1. 4 1
      reflex/vars/sequence.py
  2. 3 0
      tests/units/test_var.py

+ 4 - 1
reflex/vars/sequence.py

@@ -545,7 +545,7 @@ class LiteralStringVar(LiteralVar, StringVar):
     def create(
     def create(
         cls,
         cls,
         value: str,
         value: str,
-        _var_type: GenericType | None = str,
+        _var_type: GenericType | None = None,
         _var_data: VarData | None = None,
         _var_data: VarData | None = None,
     ) -> StringVar:
     ) -> StringVar:
         """Create a var from a string value.
         """Create a var from a string value.
@@ -558,6 +558,9 @@ class LiteralStringVar(LiteralVar, StringVar):
         Returns:
         Returns:
             The var.
             The var.
         """
         """
+        # Determine var type in case the value is inherited from str.
+        _var_type = _var_type or type(value) or str
+
         if REFLEX_VAR_OPENING_TAG in value:
         if REFLEX_VAR_OPENING_TAG in value:
             strings_and_vals: list[Var | str] = []
             strings_and_vals: list[Var | str] = []
             offset = 0
             offset = 0

+ 3 - 0
tests/units/test_var.py

@@ -1809,3 +1809,6 @@ def test_to_string_operation():
 
 
     assert cast(Var, TestState.email)._var_type == Email
     assert cast(Var, TestState.email)._var_type == Email
     assert cast(Var, TestState.optional_email)._var_type == Optional[Email]
     assert cast(Var, TestState.optional_email)._var_type == Optional[Email]
+
+    single_var = Var.create(Email())
+    assert single_var._var_type == Email