make integration tests pass
This commit is contained in:
parent
3d7ea3735c
commit
69f0d1db0b
@ -268,6 +268,8 @@ async def test_submit(driver, form_submit: AppHarness):
|
|||||||
|
|
||||||
form_data = format.collect_form_dict_names(form_data)
|
form_data = format.collect_form_dict_names(form_data)
|
||||||
|
|
||||||
|
print(form_data)
|
||||||
|
|
||||||
assert form_data["name_input"] == "foo"
|
assert form_data["name_input"] == "foo"
|
||||||
assert form_data["pin_input"] == pin_values
|
assert form_data["pin_input"] == pin_values
|
||||||
assert form_data["number_input"] == "-3"
|
assert form_data["number_input"] == "-3"
|
||||||
|
@ -107,7 +107,7 @@ def test_tailwind_app(tailwind_app: AppHarness, tailwind_disabled: bool):
|
|||||||
assert len(paragraphs) == 3
|
assert len(paragraphs) == 3
|
||||||
for p in paragraphs:
|
for p in paragraphs:
|
||||||
assert tailwind_app.poll_for_content(p, exp_not_equal="") == PARAGRAPH_TEXT
|
assert tailwind_app.poll_for_content(p, exp_not_equal="") == PARAGRAPH_TEXT
|
||||||
assert p.value_of_css_property("font-family") == "monospace"
|
assert p.value_of_css_property("font-family") == '"monospace"'
|
||||||
if tailwind_disabled:
|
if tailwind_disabled:
|
||||||
# expect default color, not "text-red-500" from tailwind utility class
|
# expect default color, not "text-red-500" from tailwind utility class
|
||||||
assert p.value_of_css_property("color") not in TEXT_RED_500_COLOR
|
assert p.value_of_css_property("color") not in TEXT_RED_500_COLOR
|
||||||
|
@ -1113,7 +1113,11 @@ class App(MiddlewareMixin, LifespanMixin, Base):
|
|||||||
Returns:
|
Returns:
|
||||||
Task if the event was backgroundable, otherwise None
|
Task if the event was backgroundable, otherwise None
|
||||||
"""
|
"""
|
||||||
|
# print("Processing background", repr(event))
|
||||||
substate, handler = state._get_event_handler(event)
|
substate, handler = state._get_event_handler(event)
|
||||||
|
# print("Substate", substate)
|
||||||
|
# print("Handler", handler)
|
||||||
|
|
||||||
if not handler.is_background:
|
if not handler.is_background:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -4,10 +4,12 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
import reflex as rx
|
||||||
from reflex.components.chakra import ChakraComponent, LiteralInputVariant
|
from reflex.components.chakra import ChakraComponent, LiteralInputVariant
|
||||||
from reflex.components.component import Component
|
from reflex.components.component import Component
|
||||||
from reflex.components.tags.tag import Tag
|
from reflex.components.tags.tag import Tag
|
||||||
from reflex.event import EventHandler
|
from reflex.event import EventHandler
|
||||||
|
from reflex.ivars import ArrayVar
|
||||||
from reflex.utils import format
|
from reflex.utils import format
|
||||||
from reflex.utils.imports import ImportDict, merge_imports
|
from reflex.utils.imports import ImportDict, merge_imports
|
||||||
from reflex.vars import Var
|
from reflex.vars import Var
|
||||||
@ -186,7 +188,10 @@ class PinInputField(ChakraComponent):
|
|||||||
props["name"] = f"{name}-{i}"
|
props["name"] = f"{name}-{i}"
|
||||||
return PinInputField.create(**props, index=i, key=i)
|
return PinInputField.create(**props, index=i, key=i)
|
||||||
|
|
||||||
return Var.range(length).foreach(_create) # type: ignore
|
return rx.foreach( # type: ignore
|
||||||
|
ArrayVar.range(length), # type: ignore
|
||||||
|
_create,
|
||||||
|
)
|
||||||
|
|
||||||
def _get_ref_hook(self) -> Optional[str]:
|
def _get_ref_hook(self) -> Optional[str]:
|
||||||
return None
|
return None
|
||||||
|
@ -11,7 +11,7 @@ from reflex.components.el.element import Element
|
|||||||
from reflex.components.tags.tag import Tag
|
from reflex.components.tags.tag import Tag
|
||||||
from reflex.constants import Dirs, EventTriggers
|
from reflex.constants import Dirs, EventTriggers
|
||||||
from reflex.event import EventChain, EventHandler
|
from reflex.event import EventChain, EventHandler
|
||||||
from reflex.ivars.base import ImmutableVar
|
from reflex.ivars.base import ImmutableVar, LiteralVar
|
||||||
from reflex.utils.format import format_event_chain
|
from reflex.utils.format import format_event_chain
|
||||||
from reflex.utils.imports import ImportDict
|
from reflex.utils.imports import ImportDict
|
||||||
from reflex.vars import Var, VarData
|
from reflex.vars import Var, VarData
|
||||||
@ -185,7 +185,7 @@ class Form(BaseHTML):
|
|||||||
HANDLE_SUBMIT_JS_JINJA2.render(
|
HANDLE_SUBMIT_JS_JINJA2.render(
|
||||||
handle_submit_unique_name=self.handle_submit_unique_name,
|
handle_submit_unique_name=self.handle_submit_unique_name,
|
||||||
form_data=FORM_DATA,
|
form_data=FORM_DATA,
|
||||||
field_ref_mapping=str(Var.create_safe(self._get_form_refs())),
|
field_ref_mapping=str(LiteralVar.create(self._get_form_refs())),
|
||||||
on_submit_event_chain=format_event_chain(
|
on_submit_event_chain=format_event_chain(
|
||||||
self.event_triggers[EventTriggers.ON_SUBMIT]
|
self.event_triggers[EventTriggers.ON_SUBMIT]
|
||||||
),
|
),
|
||||||
@ -213,21 +213,18 @@ class Form(BaseHTML):
|
|||||||
# when ref start with refs_ it's an array of refs, so we need different method
|
# when ref start with refs_ it's an array of refs, so we need different method
|
||||||
# to collect data
|
# to collect data
|
||||||
if ref.startswith("refs_"):
|
if ref.startswith("refs_"):
|
||||||
ref_var = Var.create_safe(ref[:-3], _var_is_string=False).as_ref()
|
ref_var = ImmutableVar.create_safe(ref[:-3]).as_ref()
|
||||||
form_refs[ref[5:-3]] = Var.create_safe(
|
form_refs[ref[len("refs_") : -3]] = ImmutableVar.create_safe(
|
||||||
f"getRefValues({str(ref_var)})",
|
f"getRefValues({str(ref_var)})",
|
||||||
_var_is_local=False,
|
|
||||||
_var_is_string=False,
|
|
||||||
_var_data=VarData.merge(ref_var._get_all_var_data()),
|
_var_data=VarData.merge(ref_var._get_all_var_data()),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
ref_var = Var.create_safe(ref, _var_is_string=False).as_ref()
|
ref_var = ImmutableVar.create_safe(ref).as_ref()
|
||||||
form_refs[ref[4:]] = Var.create_safe(
|
form_refs[ref[4:]] = ImmutableVar.create_safe(
|
||||||
f"getRefValue({str(ref_var)})",
|
f"getRefValue({str(ref_var)})",
|
||||||
_var_is_local=False,
|
|
||||||
_var_is_string=False,
|
|
||||||
_var_data=VarData.merge(ref_var._get_all_var_data()),
|
_var_data=VarData.merge(ref_var._get_all_var_data()),
|
||||||
)
|
)
|
||||||
|
# print(repr(form_refs))
|
||||||
return form_refs
|
return form_refs
|
||||||
|
|
||||||
def _get_vars(self, include_children: bool = True) -> Iterator[Var]:
|
def _get_vars(self, include_children: bool = True) -> Iterator[Var]:
|
||||||
|
@ -724,7 +724,7 @@ class ImmutableVar(Var, Generic[VAR_TYPE]):
|
|||||||
}
|
}
|
||||||
),
|
),
|
||||||
).to(ObjectVar)
|
).to(ObjectVar)
|
||||||
return refs[self]
|
return refs[LiteralVar.create(str(self))]
|
||||||
|
|
||||||
def _type(self) -> StringVar:
|
def _type(self) -> StringVar:
|
||||||
"""Returns the type of the object.
|
"""Returns the type of the object.
|
||||||
@ -804,7 +804,7 @@ class LiteralVar(ImmutableVar):
|
|||||||
|
|
||||||
if isinstance(value, EventSpec):
|
if isinstance(value, EventSpec):
|
||||||
event_name = LiteralVar.create(
|
event_name = LiteralVar.create(
|
||||||
".".join(get_event_handler_parts(value.handler))
|
".".join(filter(None, get_event_handler_parts(value.handler)))
|
||||||
)
|
)
|
||||||
event_args = LiteralVar.create(
|
event_args = LiteralVar.create(
|
||||||
{str(name): value for name, value in value.args}
|
{str(name): value for name, value in value.args}
|
||||||
|
@ -29,7 +29,12 @@ from typing_extensions import get_origin
|
|||||||
from reflex import constants
|
from reflex import constants
|
||||||
from reflex.constants.base import REFLEX_VAR_OPENING_TAG
|
from reflex.constants.base import REFLEX_VAR_OPENING_TAG
|
||||||
from reflex.utils.types import GenericType
|
from reflex.utils.types import GenericType
|
||||||
from reflex.vars import ImmutableVarData, Var, VarData, _global_vars
|
from reflex.vars import (
|
||||||
|
ImmutableVarData,
|
||||||
|
Var,
|
||||||
|
VarData,
|
||||||
|
_global_vars,
|
||||||
|
)
|
||||||
|
|
||||||
from .base import (
|
from .base import (
|
||||||
CachedVarOperation,
|
CachedVarOperation,
|
||||||
|
@ -666,7 +666,7 @@ def format_queue_events(
|
|||||||
call_event_fn,
|
call_event_fn,
|
||||||
call_event_handler,
|
call_event_handler,
|
||||||
)
|
)
|
||||||
from reflex.ivars.base import FunctionVar, ImmutableVar
|
from reflex.ivars import FunctionVar, ImmutableVar
|
||||||
|
|
||||||
if not events:
|
if not events:
|
||||||
return ImmutableVar("(() => null)").to(FunctionVar, EventChain)
|
return ImmutableVar("(() => null)").to(FunctionVar, EventChain)
|
||||||
@ -804,8 +804,8 @@ def format_array_ref(refs: str, idx: Var | None) -> str:
|
|||||||
"""
|
"""
|
||||||
clean_ref = re.sub(r"[^\w]+", "_", refs)
|
clean_ref = re.sub(r"[^\w]+", "_", refs)
|
||||||
if idx is not None:
|
if idx is not None:
|
||||||
idx._var_is_local = True
|
# idx._var_is_local = True
|
||||||
return f"refs_{clean_ref}[{idx}]"
|
return f"refs_{clean_ref}[{str(idx)}]"
|
||||||
return f"refs_{clean_ref}"
|
return f"refs_{clean_ref}"
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user