assert that .render returns jsonable values (#4708)

* assert that .render returns jsonable values

* render component default
This commit is contained in:
Khaleel Al-Adhami 2025-01-28 23:02:14 -08:00 committed by GitHub
parent 5beea25b31
commit 58e63f387f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 3 deletions

View File

@ -90,7 +90,7 @@
break; break;
{% endfor %} {% endfor %}
default: default:
return {{ component.default }}; return {{ render(component.default) }};
break; break;
} }
})() })()

View File

@ -65,7 +65,24 @@ class Tag:
Yields: Yields:
Tuple[str, Any]: The field name and value. Tuple[str, Any]: The field name and value.
""" """
from reflex.components.component import BaseComponent
for field in dataclasses.fields(self): for field in dataclasses.fields(self):
value = getattr(self, field.name)
if isinstance(value, list):
children = []
for child in value:
if isinstance(child, BaseComponent):
children.append(child.render())
else:
children.append(child)
yield field.name, children
continue
if isinstance(value, BaseComponent):
yield field.name, value.render()
continue
if callable(value) and not isinstance(value, Var):
continue
yield field.name, getattr(self, field.name) yield field.name, getattr(self, field.name)
def add_props(self, **kwargs: Optional[Any]) -> Tag: def add_props(self, **kwargs: Optional[Any]) -> Tag:

View File

@ -78,7 +78,7 @@ def test_match_components():
assert fifth_return_value_render["name"] == "RadixThemesText" assert fifth_return_value_render["name"] == "RadixThemesText"
assert fifth_return_value_render["children"][0]["contents"] == '{"sixth value"}' assert fifth_return_value_render["children"][0]["contents"] == '{"sixth value"}'
default = match_child["default"].render() default = match_child["default"]
assert default["name"] == "RadixThemesText" assert default["name"] == "RadixThemesText"
assert default["children"][0]["contents"] == '{"default value"}' assert default["children"][0]["contents"] == '{"default value"}'
@ -153,7 +153,7 @@ def test_match_on_component_without_default():
match_comp = Match.create(MatchState.value, *match_case_tuples) match_comp = Match.create(MatchState.value, *match_case_tuples)
default = match_comp.render()["children"][0]["default"] default = match_comp.render()["children"][0]["default"]
assert isinstance(default, Fragment) assert isinstance(default, dict) and default["name"] == Fragment.__name__
def test_match_on_var_no_default(): def test_match_on_var_no_default():