stronger checking and tests

This commit is contained in:
Khaleel Al-Adhami 2025-02-05 15:29:01 -08:00
parent da96cfb6ec
commit 4d6ef9a10c
2 changed files with 22 additions and 1 deletions

View File

@ -187,11 +187,13 @@ class ObjectVar(Var[OBJECT_TYPE], python_types=Mapping):
Returns:
The item from the object.
"""
from .sequence import LiteralStringVar
if not isinstance(key, (StringVar, str, int, NumberVar)) or (
isinstance(key, NumberVar) and key._is_strict_float()
):
raise_unsupported_operand_types("[]", (type(self), type(key)))
if isinstance(key, str):
if isinstance(key, str) and isinstance(Var.create(key), LiteralStringVar):
return self.__getattr__(key)
return ObjectItemOperation.create(self, key).guess_type()

View File

@ -10,6 +10,8 @@ from reflex.testing import AppHarness
def VarOperations():
"""App with var operations."""
from typing import TypedDict
import reflex as rx
from reflex.vars.base import LiteralVar
from reflex.vars.sequence import ArrayVar
@ -17,6 +19,10 @@ def VarOperations():
class Object(rx.Base):
name: str = "hello"
class Person(TypedDict):
name: str
age: int
class VarOperationState(rx.State):
int_var1: rx.Field[int] = rx.field(10)
int_var2: rx.Field[int] = rx.field(5)
@ -34,6 +40,9 @@ def VarOperations():
dict1: rx.Field[dict[int, int]] = rx.field({1: 2})
dict2: rx.Field[dict[int, int]] = rx.field({3: 4})
html_str: rx.Field[str] = rx.field("<div>hello</div>")
people: rx.Field[list[Person]] = rx.field(
[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]
)
app = rx.App(_state=rx.State)
@ -619,6 +628,15 @@ def VarOperations():
),
id="dict_in_foreach3",
),
rx.box(
rx.foreach(
VarOperationState.people,
lambda person: rx.text.span(
"Hello " + person["name"], person["age"] + 3
),
),
id="typed_dict_in_foreach",
),
)
@ -826,6 +844,7 @@ def test_var_operations(driver, var_operations: AppHarness):
("dict_in_foreach1", "a1b2"),
("dict_in_foreach2", "12"),
("dict_in_foreach3", "1234"),
("typed_dict_in_foreach", "Hello Alice33Hello Bob28"),
]
for tag, expected in tests: