Skip to content

Commit 02f60a5

Browse files
committed
Merge branch 'main' into khaleel/eng-5649-foreach-with-var-name-that-shadows-js-keyword-blows-up
2 parents db4aa45 + 96ff0b5 commit 02f60a5

62 files changed

Lines changed: 775 additions & 624 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.coveragerc

Lines changed: 0 additions & 40 deletions
This file was deleted.

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ fail_fast: true
22

33
repos:
44
- repo: https://github.com/astral-sh/ruff-pre-commit
5-
rev: v0.11.7
5+
rev: v0.11.8
66
hooks:
77
- id: ruff-format
88
args: [reflex, tests]

pyi_hashes.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"reflex/components/__init__.pyi": "76ba0a12cd3a7ba5ab6341a3ae81551f",
44
"reflex/components/base/__init__.pyi": "e9aaf47be1e1977eacee97b880c8f7de",
55
"reflex/components/base/app_wrap.pyi": "387fc7a0c2da8760d9449e2893e44eec",
6-
"reflex/components/base/body.pyi": "2cc870cec4b1c28081dd40467752c2b7",
6+
"reflex/components/base/body.pyi": "2d16002f24c8ee0007b46ff2bf1f2c78",
77
"reflex/components/base/document.pyi": "30377cdfb02b564f8de29b0473d2346c",
88
"reflex/components/base/error_boundary.pyi": "c56b591d14a92b99a1e97e04afe167d7",
99
"reflex/components/base/fragment.pyi": "603ee8e03af88d4a8ff6bc1fbce4e022",
1010
"reflex/components/base/head.pyi": "893047aa32da553711db8f1345adb6b0",
11-
"reflex/components/base/link.pyi": "396488afa3b7a5b0d0e6c5e89159f857",
12-
"reflex/components/base/meta.pyi": "bc4b4fda6f022a517de339ffdd667e3b",
11+
"reflex/components/base/link.pyi": "e96179dc7823f354fb73a6c03e31028c",
12+
"reflex/components/base/meta.pyi": "da52c3212fac6b50560863146a7afcc3",
1313
"reflex/components/base/script.pyi": "530cf8f47eb90082bf65942e8b5d745f",
1414
"reflex/components/base/strict_mode.pyi": "d972e0ff2a6f961e7df90fc27b8bb51b",
1515
"reflex/components/core/__init__.pyi": "44bcee7bc4e27e2f4f4707b843acf291",
@@ -26,26 +26,26 @@
2626
"reflex/components/datadisplay/dataeditor.pyi": "cb03d732e2fe771a8d46c7bcda671f92",
2727
"reflex/components/datadisplay/shiki_code_block.pyi": "87db7639bfa5cd53e1709e1363f93278",
2828
"reflex/components/el/__init__.pyi": "09042a2db5e0637e99b5173430600522",
29-
"reflex/components/el/element.pyi": "06ac2213b062119323291fa66a1ac19e",
29+
"reflex/components/el/element.pyi": "ea6b33a8545c2c845dc6c30ff1c872a4",
3030
"reflex/components/el/elements/__init__.pyi": "280ed457675f3720e34b560a3f617739",
3131
"reflex/components/el/elements/base.pyi": "6e533348b5e1a88cf62fbb5a38dbd795",
32-
"reflex/components/el/elements/forms.pyi": "161f1ef847e5da8755528a7977fdcf53",
33-
"reflex/components/el/elements/inline.pyi": "33d9d860e75dd8c4769825127ed363bb",
32+
"reflex/components/el/elements/forms.pyi": "3ff8fd5d8a36418874e9fe4ff76bbfe8",
33+
"reflex/components/el/elements/inline.pyi": "f881d229c9ecaa61d17ac6837ac9a839",
3434
"reflex/components/el/elements/media.pyi": "addd6872281d65d44a484358b895432f",
35-
"reflex/components/el/elements/metadata.pyi": "974a86d9f0662f6fc15a5bb4b3a87862",
35+
"reflex/components/el/elements/metadata.pyi": "a5b9b30c4649e88aa26a1a5609fc86ef",
3636
"reflex/components/el/elements/other.pyi": "995a4fbf10bfdb7f48808210dfe413bd",
3737
"reflex/components/el/elements/scripts.pyi": "cd5bd53c3a6b016fbb913aff36d63344",
3838
"reflex/components/el/elements/sectioning.pyi": "65aa53b1372598ec1785616cb7016032",
3939
"reflex/components/el/elements/tables.pyi": "e1282d8ddf4efa4c911ca104a907ee88",
40-
"reflex/components/el/elements/typography.pyi": "00088c9c1b68a14e5a41d837e8fdf542",
40+
"reflex/components/el/elements/typography.pyi": "928ff998c9bbb32ae7ccce5f6cb885a7",
4141
"reflex/components/gridjs/datatable.pyi": "3db3f994640c19be5c3fa2983f71de56",
42-
"reflex/components/lucide/icon.pyi": "a5521a8baf8d2d7281e3fdfe6ce7073b",
43-
"reflex/components/markdown/markdown.pyi": "6b268afa879e33abf651bda56be5065e",
42+
"reflex/components/lucide/icon.pyi": "508c8844959925555a895df8dcac3751",
43+
"reflex/components/markdown/markdown.pyi": "1fc31d2652d3ff015c6da2c7cbab716a",
4444
"reflex/components/moment/moment.pyi": "6dd0c7cee5f0f29bc11d830c697d7f92",
4545
"reflex/components/next/base.pyi": "14aafd5b018a4bc9748a3c9980fcfe3e",
4646
"reflex/components/next/image.pyi": "3a0d1970e69144e9c6806e68ab99f181",
4747
"reflex/components/next/link.pyi": "cd913e10205314afe67101d9640e05cb",
48-
"reflex/components/next/video.pyi": "09698418db651917630a7fefeb573fc2",
48+
"reflex/components/next/video.pyi": "aa8f814dec99f8712dc2351b15f922ac",
4949
"reflex/components/plotly/plotly.pyi": "b1f0bbcaf4706d0a373c99395ba50118",
5050
"reflex/components/radix/__init__.pyi": "8d586cbff1d7130d09476ac72ee73400",
5151
"reflex/components/radix/primitives/__init__.pyi": "fe8715decf3e9ae471b56bba14e42cb3",
@@ -101,7 +101,7 @@
101101
"reflex/components/radix/themes/layout/container.pyi": "4020c3dca660027b84d11cc4198393c4",
102102
"reflex/components/radix/themes/layout/flex.pyi": "f814281a5635ad43dd1df23f8e356c66",
103103
"reflex/components/radix/themes/layout/grid.pyi": "6062188367a2c253f014f916197c963d",
104-
"reflex/components/radix/themes/layout/list.pyi": "0e91d3f1c82c9094f328e5b8ecd2f60a",
104+
"reflex/components/radix/themes/layout/list.pyi": "930009f82662686841e9ce97bfd4a1ea",
105105
"reflex/components/radix/themes/layout/section.pyi": "41895910072e023ed0fef6a8ad956046",
106106
"reflex/components/radix/themes/layout/spacer.pyi": "029eb0eaa731bcdff7c496e0437e22b1",
107107
"reflex/components/radix/themes/layout/stack.pyi": "3b0da99b00c826d087ed89fc67c595c1",

pyproject.toml

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "reflex"
3-
version = "0.7.10dev1"
3+
version = "0.7.11dev1"
44
description = "Web apps in pure Python."
55
license = { text = "Apache-2.0" }
66
authors = [
@@ -166,3 +166,42 @@ dev = [
166166
"starlette-admin >=0.14",
167167
"uvicorn >=0.34.0",
168168
]
169+
170+
171+
[tool.coverage.run]
172+
source = ["reflex"]
173+
branch = true
174+
omit = [
175+
"*/pyi_generator.py",
176+
"reflex/__main__.py",
177+
"reflex/app_module_for_backend.py",
178+
"reflex/components/chakra/*",
179+
"reflex/experimental/*",
180+
]
181+
182+
[tool.coverage.report]
183+
show_missing = true
184+
# TODO bump back to 79
185+
fail_under = 70
186+
precision = 2
187+
ignore_errors = true
188+
189+
exclude_also = [
190+
"def __repr__",
191+
# Don't complain about missing debug-only code:
192+
"if self.debug",
193+
# Don't complain if tests don't hit defensive assertion code:
194+
"raise AssertionError",
195+
"raise NotImplementedError",
196+
# Regexes for lines to exclude from consideration
197+
"if 0:",
198+
# Don't complain if non-runnable code isn't run:
199+
"if __name__ == .__main__.:",
200+
# Don't complain about abstract methods, they aren't run:
201+
"@(abc.)?abstractmethod",
202+
# Don't complain about overloaded methods:
203+
"@overload",
204+
]
205+
206+
[tool.coverage.html]
207+
directory = "coverage_html_report"

reflex/.templates/jinja/web/pages/_app.js.jinja2

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function AppWrap({children}) {
2222
{{ renderHooks(hooks) }}
2323

2424
return (
25-
{{utils.render(render, indent_width=0)}}
25+
{{utils.render(render)}}
2626
)
2727
}
2828

@@ -37,15 +37,15 @@ export default function MyApp({ Component, pageProps }) {
3737
window["__reflex"] = windowImports;
3838
}, []);
3939
return (
40-
<ThemeProvider defaultTheme={ defaultColorMode } attribute="class">
41-
<StateProvider>
42-
<EventLoopProvider>
43-
<AppWrap>
44-
<Component {...pageProps} />
45-
</AppWrap>
46-
</EventLoopProvider>
47-
</StateProvider>
48-
</ThemeProvider>
40+
jsx(ThemeProvider, {defaultTheme:defaultColorMode,attribute:"class"},
41+
jsx(StateProvider, {},
42+
jsx(EventLoopProvider, {},
43+
jsx(AppWrap, {},
44+
jsx(Component, pageProps)
45+
)
46+
)
47+
)
48+
)
4949
);
5050
}
5151

reflex/.templates/jinja/web/pages/_document.js.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
{% block export %}
44
export default function Document() {
55
return (
6-
{{utils.render(document, indent_width=0)}}
6+
{{utils.render(document)}}
77
)
88
}
99
{% endblock %}

reflex/.templates/jinja/web/pages/index.js.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export default function Component() {
1212
{{ renderHooks(hooks)}}
1313

1414
return (
15-
{{utils.render(render, indent_width=0)}}
15+
{{utils.render(render)}}
1616
)
1717
}
1818
{% endblock %}

reflex/.templates/jinja/web/pages/stateful_component.js.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ export function {{tag_name}} () {
66
{{ renderHooksWithMemo(all_hooks, memo_trigger_hooks) }}
77

88
return (
9-
{{utils.render(component.render(), indent_width=0)}}
9+
{{utils.render(component.render())}}
1010
)
1111
}

reflex/.templates/jinja/web/pages/utils.js.jinja2

Lines changed: 35 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,116 +1,79 @@
11
{# Rendering components recursively. #}
22
{# Args: #}
33
{# component: component dictionary #}
4-
{# indent_width: indent width #}
5-
{% macro render(component, indent_width=0) %}
6-
{% filter indent(width=indent_width) %}
7-
{%- if component is not mapping %}
8-
{{- component }}
9-
{%- elif "iterable" in component %}
10-
{{- render_iterable_tag(component) }}
11-
{%- elif component.name == "match"%}
12-
{{- render_match_tag(component) }}
13-
{%- elif "cond" in component %}
14-
{{- render_condition_tag(component) }}
15-
{%- elif component.children|length %}
16-
{{- render_tag(component) }}
17-
{%- else %}
18-
{{- render_self_close_tag(component) }}
19-
{%- endif %}
20-
{% endfilter %}
4+
{% macro render(component) %}
5+
{%- if component is not mapping %}{{ component }}
6+
{%- elif "iterable" in component %}{{ render_iterable_tag(component) }}
7+
{%- elif component.name == "match"%}{{ render_match_tag(component) }}
8+
{%- elif "cond" in component %}{{ render_condition_tag(component) }}
9+
{%- elif component.children|length %}{{ render_tag(component) }}
10+
{%- else %}{{ render_self_close_tag(component) }}
11+
{%- endif %}
2112
{% endmacro %}
2213

2314
{# Rendering self close tag. #}
2415
{# Args: #}
2516
{# component: component dictionary #}
2617
{% macro render_self_close_tag(component) %}
27-
{%- if component.name|length %}
28-
<{{ component.name }} {{- render_props(component.props) }}{% if component.autofocus %} ref={focusRef} {% endif %}/>
29-
{%- else %}
30-
{{- component.contents }}
31-
{%- endif %}
18+
{% if component.name|length %}
19+
jsx({{ component.name }},{{ render_props(component.props) }},{{ component.contents }})
20+
{% elif component.contents|length -%}{{ component.contents }}
21+
{% else %}""
22+
{% endif %}
3223
{% endmacro %}
3324

3425
{# Rendering close tag with args and props. #}
3526
{# Args: #}
3627
{# component: component dictionary #}
3728
{% macro render_tag(component) %}
38-
<{{component.name}} {{- render_props(component.props) }}>
39-
{{ component.contents }}
40-
{% for child in component.children %}
41-
{{ render(child) }}
42-
{% endfor %}
43-
</{{component.name}}>
29+
jsx(
30+
{% if component.name|length %}{{ component.name }}{% else %}Fragment{% endif %},
31+
{{ render_props(component.props) }},
32+
{% if component.contents|length %}{{ component.contents }},{% endif %}
33+
{% for child in component.children %}{% if child is mapping or child|length %}{{ render(child) }},{% endif %}{% endfor %}
34+
)
4435
{%- endmacro %}
4536

4637

4738
{# Rendering condition component. #}
4839
{# Args: #}
4940
{# component: component dictionary #}
5041
{% macro render_condition_tag(component) %}
51-
{ {{- component.cond_state }} ? (
52-
{{ render(component.true_value) }}
53-
) : (
54-
{{ render(component.false_value) }}
55-
)}
42+
({{ component.cond_state }} ? ({{ render(component.true_value) }}) : ({{ render(component.false_value) }}))
5643
{%- endmacro %}
5744

5845

5946
{# Rendering iterable component. #}
6047
{# Args: #}
6148
{# component: component dictionary #}
6249
{% macro render_iterable_tag(component) %}
63-
<>{ {{ component.iterable_state }}.map(({{ component.arg_name }}, {{ component.arg_index }}) => (
64-
{% for child in component.children %}
65-
{{ render(child) }}
66-
{% endfor %}
67-
))}</>
50+
{{ component.iterable_state }}.map(({{ component.arg_name }},{{ component.arg_index }})=>({% for child in component.children %}{{ render(child) }}{% endfor %}))
6851
{%- endmacro %}
6952

7053

7154
{# Rendering props of a component. #}
7255
{# Args: #}
7356
{# component: component dictionary #}
74-
{% macro render_props(props) %}
75-
{% if props|length %} {{ props|join(" ") }}{% endif %}
76-
{% endmacro %}
57+
{% macro render_props(props) %}{{ "{" }}{% if props|length %}{{ props|join(",") }}{% endif %}{{ "}" }}{% endmacro %}
7758

7859
{# Rendering Match component. #}
7960
{# Args: #}
8061
{# component: component dictionary #}
8162
{% macro render_match_tag(component) %}
82-
{
83-
(() => {
84-
switch (JSON.stringify({{ component.cond._js_expr }})) {
85-
{% for case in component.match_cases %}
86-
{% for condition in case[:-1] %}
87-
case JSON.stringify({{ condition._js_expr }}):
88-
{% endfor %}
89-
return {{ render(case[-1]) }};
90-
break;
91-
{% endfor %}
92-
default:
93-
return {{ render(component.default) }};
94-
break;
95-
}
96-
})()
97-
}
98-
{%- endmacro %}
99-
100-
101-
{# Rendering content with args. #}
102-
{# Args: #}
103-
{# component: component dictionary #}
104-
{% macro render_arg_content(component) %}
105-
{% filter indent(width=2) %}
106-
{# no string below for a line break #}
107-
108-
{({ {{component.args|join(", ")}} }) => (
109-
{% for child in component.children %}
110-
{{ render(child) }}
63+
(() => {
64+
switch (JSON.stringify({{ component.cond._js_expr }})) {
65+
{% for case in component.match_cases %}
66+
{% for condition in case[:-1] %}
67+
case JSON.stringify({{ condition._js_expr }}):
68+
{% endfor %}
69+
return {{ render(case[-1]) }};
70+
break;
11171
{% endfor %}
112-
)}
113-
{% endfilter %}
72+
default:
73+
return {{ render(component.default) }};
74+
break;
75+
}
76+
})()
11477
{% endmacro %}
11578

11679

0 commit comments

Comments
 (0)