From 2eaddaa2c4b0235abcb78f39c7f07c1e53db1213 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 00:09:59 -0800 Subject: [PATCH 01/11] Fix uvicorn related test suite errors --- src/reactpy/testing/backend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/reactpy/testing/backend.py b/src/reactpy/testing/backend.py index f41563489..439be4f0d 100644 --- a/src/reactpy/testing/backend.py +++ b/src/reactpy/testing/backend.py @@ -119,7 +119,7 @@ async def __aenter__(self) -> BackendFixture: self.log_records = self._exit_stack.enter_context(capture_reactpy_logs()) # Wait for the server to start - self.webserver.config.setup_event_loop() + self.webserver.config.get_loop_factory() self.webserver_task = asyncio.create_task(self.webserver.serve()) await asyncio.sleep(1) From b00bfe1a3b6ef2fc88c20e895853c97e1920cc96 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 00:28:41 -0800 Subject: [PATCH 02/11] fix type errors --- src/reactpy/pyscript/component_template.py | 2 +- src/reactpy/utils.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reactpy/pyscript/component_template.py b/src/reactpy/pyscript/component_template.py index 47bf4d6a3..71feeb999 100644 --- a/src/reactpy/pyscript/component_template.py +++ b/src/reactpy/pyscript/component_template.py @@ -1,4 +1,4 @@ -# ruff: noqa: TC004, N802, N816, RUF006 +# ruff: noqa: N816, RUF006 # type: ignore from typing import TYPE_CHECKING diff --git a/src/reactpy/utils.py b/src/reactpy/utils.py index 5e65f37ae..ec2fa272b 100644 --- a/src/reactpy/utils.py +++ b/src/reactpy/utils.py @@ -111,7 +111,7 @@ def string_to_reactpy( try: root_node: etree._Element = fromstring( html.strip(), - parser=etree.HTMLParser( + parser=etree.HTMLParser( # type: ignore remove_comments=True, remove_pis=True, remove_blank_text=True, From ae43d90c17a0ee5b290a70d360bb40cf59c94bc7 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 00:34:14 -0800 Subject: [PATCH 03/11] attempt to fix `test_non_html_tag_behavior` --- tests/test_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_utils.py b/tests/test_utils.py index e9d2f32f9..0cb44646f 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -260,10 +260,10 @@ def make_links_blue(node): def test_non_html_tag_behavior(): - source = "" + source = "" expected = { - "tagName": "my-tag", + "tagName": "mytag", "attributes": {"data-x": "something"}, "children": [ {"tagName": "my-other-tag", "attributes": {"key": "a-key"}, "key": "a-key"}, From a8f7f8acad073abce700bfe7f403e8dcd6e3cbce Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 00:39:09 -0800 Subject: [PATCH 04/11] Add playwright deps install cmd --- tests/conftest.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/conftest.py b/tests/conftest.py index d12706641..3c8eb9b23 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -37,6 +37,7 @@ def pytest_addoption(parser: Parser) -> None: @pytest.fixture(autouse=True, scope="session") def install_playwright(): subprocess.run(["playwright", "install", "chromium"], check=True) # noqa: S607, S603 + subprocess.run(["playwright", "install-deps"], check=True) # noqa: S607, S603 @pytest.fixture(autouse=True, scope="session") From a7500e43b4de227725cc0f5b808fde0fab975e08 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 00:47:07 -0800 Subject: [PATCH 05/11] attempt 2 --- src/reactpy/utils.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/reactpy/utils.py b/src/reactpy/utils.py index ec2fa272b..2c24475f4 100644 --- a/src/reactpy/utils.py +++ b/src/reactpy/utils.py @@ -118,19 +118,17 @@ def string_to_reactpy( recover=not strict, ), ) + return _etree_to_vdom(root_node, transforms, intercept_links) except etree.XMLSyntaxError as e: - if not strict: - raise e # nocov - msg = ( - "An error has occurred while parsing the HTML.\n\n" - "This HTML may be malformatted, or may not perfectly adhere to HTML5.\n" - "If you believe the exception above was due to something intentional, you " - "can disable the strict parameter on string_to_reactpy().\n" - "Otherwise, repair your broken HTML and try again." - ) - raise HTMLParseError(msg) from e - - return _etree_to_vdom(root_node, transforms, intercept_links) + if strict: + msg = ( + "An error has occurred while parsing the HTML.\n\n" + "This HTML may be malformatted, or may not perfectly adhere to HTML5.\n" + "If you believe the exception above was due to something intentional, you " + "can disable the strict parameter on string_to_reactpy().\n" + "Otherwise, repair your broken HTML and try again." + ) + raise HTMLParseError(msg) from e class HTMLParseError(etree.LxmlSyntaxError): # type: ignore[misc] From 103be843c15315109deb9faddc13a0d4e1c44a54 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 00:56:09 -0800 Subject: [PATCH 06/11] attempt 3 --- src/reactpy/utils.py | 3 ++- tests/test_utils.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/reactpy/utils.py b/src/reactpy/utils.py index 2c24475f4..623f9f9bb 100644 --- a/src/reactpy/utils.py +++ b/src/reactpy/utils.py @@ -118,7 +118,6 @@ def string_to_reactpy( recover=not strict, ), ) - return _etree_to_vdom(root_node, transforms, intercept_links) except etree.XMLSyntaxError as e: if strict: msg = ( @@ -129,6 +128,8 @@ def string_to_reactpy( "Otherwise, repair your broken HTML and try again." ) raise HTMLParseError(msg) from e + else: + return _etree_to_vdom(root_node, transforms, intercept_links) class HTMLParseError(etree.LxmlSyntaxError): # type: ignore[misc] diff --git a/tests/test_utils.py b/tests/test_utils.py index 0cb44646f..3c113b277 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -260,10 +260,10 @@ def make_links_blue(node): def test_non_html_tag_behavior(): - source = "" + source = "" expected = { - "tagName": "mytag", + "tagName": "abc", "attributes": {"data-x": "something"}, "children": [ {"tagName": "my-other-tag", "attributes": {"key": "a-key"}, "key": "a-key"}, From 60b7ed672eb304342c14aa3e5b0f47da1bb68784 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 01:06:09 -0800 Subject: [PATCH 07/11] fix lint --- src/reactpy/utils.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/reactpy/utils.py b/src/reactpy/utils.py index 623f9f9bb..180df0a4b 100644 --- a/src/reactpy/utils.py +++ b/src/reactpy/utils.py @@ -119,17 +119,16 @@ def string_to_reactpy( ), ) except etree.XMLSyntaxError as e: - if strict: - msg = ( - "An error has occurred while parsing the HTML.\n\n" - "This HTML may be malformatted, or may not perfectly adhere to HTML5.\n" - "If you believe the exception above was due to something intentional, you " - "can disable the strict parameter on string_to_reactpy().\n" - "Otherwise, repair your broken HTML and try again." - ) - raise HTMLParseError(msg) from e - else: - return _etree_to_vdom(root_node, transforms, intercept_links) + msg = ( + "An error has occurred while parsing the HTML.\n\n" + "This HTML may be malformatted, or may not perfectly adhere to HTML5.\n" + "If you believe the exception above was due to something intentional, you " + "can disable the strict parameter on string_to_reactpy().\n" + "Otherwise, repair your broken HTML and try again." + ) + raise HTMLParseError(msg) from e + + return _etree_to_vdom(root_node, transforms, intercept_links) class HTMLParseError(etree.LxmlSyntaxError): # type: ignore[misc] From 028ef73d82f59e38ee9c81ba55e08b9ea2b66b5a Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 02:19:58 -0800 Subject: [PATCH 08/11] attempt 4 --- src/reactpy/utils.py | 4 ++-- tests/test_utils.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/reactpy/utils.py b/src/reactpy/utils.py index 180df0a4b..8f7a757d3 100644 --- a/src/reactpy/utils.py +++ b/src/reactpy/utils.py @@ -118,10 +118,10 @@ def string_to_reactpy( recover=not strict, ), ) - except etree.XMLSyntaxError as e: + except Exception as e: msg = ( "An error has occurred while parsing the HTML.\n\n" - "This HTML may be malformatted, or may not perfectly adhere to HTML5.\n" + "This HTML may be malformatted, or may not adhere to the HTML5 spec.\n" "If you believe the exception above was due to something intentional, you " "can disable the strict parameter on string_to_reactpy().\n" "Otherwise, repair your broken HTML and try again." diff --git a/tests/test_utils.py b/tests/test_utils.py index 3c113b277..2e4c41c83 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -260,10 +260,12 @@ def make_links_blue(node): def test_non_html_tag_behavior(): - source = "" + source = ( + " " + ) expected = { - "tagName": "abc", + "tagName": "my-tag", "attributes": {"data-x": "something"}, "children": [ {"tagName": "my-other-tag", "attributes": {"key": "a-key"}, "key": "a-key"}, From 5f8e9ba2a1dacc0bcf5a742ab0628f2a0610068c Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 02:28:05 -0800 Subject: [PATCH 09/11] Add delay --- tests/test_widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_widgets.py b/tests/test_widgets.py index d786fded0..a5081c6b0 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -96,14 +96,14 @@ def SomeComponent(): input_1 = await display.page.wait_for_selector("#i_1") input_2 = await display.page.wait_for_selector("#i_2") - await input_1.type("1") + await input_1.type("1", delay=DEFAULT_TYPE_DELAY) poll_value = poll(lambda: value.current) await poll_value.until_equals(1) await input_2.focus() - await input_2.type("2") + await input_2.type("2", delay=DEFAULT_TYPE_DELAY) await poll_value.until_equals(12) From e8867ac2a3041db84d3d1db5470b9b7e018215da Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 02:31:17 -0800 Subject: [PATCH 10/11] a few more delays --- tests/test_widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_widgets.py b/tests/test_widgets.py index a5081c6b0..fd44bd9f4 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -125,7 +125,7 @@ def SomeComponent(): input_1 = await display.page.wait_for_selector("#i_1") input_2 = await display.page.wait_for_selector("#i_2") - await input_1.type("1") + await input_1.type("1", delay=DEFAULT_TYPE_DELAY) poll_value = poll(lambda: value.current) @@ -136,6 +136,6 @@ def SomeComponent(): await poll_value.until_equals("1") - await input_2.type("2") + await input_2.type("2", delay=DEFAULT_TYPE_DELAY) await poll_value.until_equals("2") From 5ecab4fc6970013aa28ba85e2ad84ae841b87209 Mon Sep 17 00:00:00 2001 From: Archmonger <16909269+Archmonger@users.noreply.github.com> Date: Sat, 22 Nov 2025 03:05:07 -0800 Subject: [PATCH 11/11] Bump JS packages and support new bun features --- pyproject.toml | 4 +-- src/js/bun.lockb | Bin 58956 -> 77154 bytes src/js/package.json | 26 ++++++++++++++----- src/js/packages/@reactpy/app/bun.lockb | Bin 26650 -> 27267 bytes src/js/packages/@reactpy/app/package.json | 12 ++++----- src/js/packages/@reactpy/client/bun.lockb | Bin 3169 -> 3241 bytes src/js/packages/@reactpy/client/package.json | 12 ++++----- src/js/packages/event-to-object/bun.lockb | Bin 17949 -> 18341 bytes src/js/packages/event-to-object/package.json | 2 +- 9 files changed, 34 insertions(+), 22 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 173fdb173..3e7eb041f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,8 +75,8 @@ commands = [ 'bun run --cwd "src/js/packages/@reactpy/client" build', 'bun install --cwd "src/js/packages/@reactpy/app"', 'bun run --cwd "src/js/packages/@reactpy/app" build', - 'python "src/build_scripts/copy_dir.py" "src/js/packages/@reactpy/app/node_modules/@pyscript/core/dist" "src/reactpy/static/pyscript"', - 'python "src/build_scripts/copy_dir.py" "src/js/packages/@reactpy/app/node_modules/morphdom/dist" "src/reactpy/static/morphdom"', + 'python "src/build_scripts/copy_dir.py" "src/js/node_modules/@pyscript/core/dist" "src/reactpy/static/pyscript"', + 'python "src/build_scripts/copy_dir.py" "src/js/node_modules/morphdom/dist" "src/reactpy/static/morphdom"', ] artifacts = [] diff --git a/src/js/bun.lockb b/src/js/bun.lockb index d668a44031eac5fbd9e34cb983ae613c37d97763..9c1c23061f459b1134072b02d5db83b7922645c6 100644 GIT binary patch literal 77154 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 WzZGu>%ix^81;fR`WSM{B-+urs56a*G delta 20449 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 UmG(J@>fMh%*B~#krsWm?3)`n7x&QzG diff --git a/src/js/package.json b/src/js/package.json index 03f49afa0..a6fd35598 100644 --- a/src/js/package.json +++ b/src/js/package.json @@ -1,11 +1,25 @@ { + "workspaces": [ + "packages/*", + "packages/@reactpy/*" + ], + "catalog": { + "preact": "^10.27.2", + "@pyscript/core": "^0.7.11", + "morphdom": "^2.7.7", + "typescript": "^5.9.3", + "json-pointer": "^0.6.2", + "@types/json-pointer": "^1.0.34", + "@reactpy/client": "file:./packages/@reactpy/client", + "event-to-object": "file:./packages/event-to-object" + }, "devDependencies": { - "@eslint/js": "^9.29.0", - "bun-types": "^1.2.16", - "eslint": "^9.18.0", - "globals": "^15.14.0", - "prettier": "^3.4.2", - "typescript-eslint": "^8.34.0" + "@eslint/js": "^9.39.1", + "bun-types": "^1.3.3", + "eslint": "^9.39.1", + "globals": "^16.5.0", + "prettier": "^3.6.2", + "typescript-eslint": "^8.47.0" }, "license": "MIT", "scripts": { diff --git a/src/js/packages/@reactpy/app/bun.lockb b/src/js/packages/@reactpy/app/bun.lockb index 5c921795bdedc7f04b09b656a943cde321df8552..578dce30ac68a1afa6a57554a492447d4aa1ad00 100644 GIT binary patch delta 6335 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 delta 5999 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 diff --git a/src/js/packages/@reactpy/app/package.json b/src/js/packages/@reactpy/app/package.json index 3239e974e..c23e50f65 100644 --- a/src/js/packages/@reactpy/app/package.json +++ b/src/js/packages/@reactpy/app/package.json @@ -1,14 +1,14 @@ { "dependencies": { - "@reactpy/client": "file:../client", - "event-to-object": "file:../../event-to-object", - "preact": "^10.25.4" + "@reactpy/client": "catalog:", + "event-to-object": "catalog:", + "preact": "catalog:" }, "description": "ReactPy's client-side entry point. This is strictly for internal use and is not designed to be distributed.", "devDependencies": { - "@pyscript/core": "^0.6", - "morphdom": "^2", - "typescript": "^5.8.3" + "@pyscript/core": "catalog:", + "morphdom": "catalog:", + "typescript": "catalog:" }, "license": "MIT", "name": "@reactpy/app", diff --git a/src/js/packages/@reactpy/client/bun.lockb b/src/js/packages/@reactpy/client/bun.lockb index 10334c0e5710a7c256634297297aa2c5536ff3bf..a64bdad53db88e4470f15b73c9138b6731088fe0 100644 GIT binary patch delta 981 zcmaDTu~Kq^mKrky1H;lN&E6ArY&X~|9TdBwQ?Bn{dwkZfnJrRlE0ud|)-K&C$uluP zt$r~(P$?YnGcYt*0C^x<2T1b(>9qW!)WqZrh5`^(!oZ*e6z2kp1Jy7HgXFJP=e6u# zySS8XVUu&~ir%#`vv2UmPGQ$73VIsd|0LJ*{M(BYHn=~SuiBua-I|(owRtwvrvALO zj6nSilc%yePc~rW5p@Ha1QGxNundr9n)p#2D9It&3*(&e@GOvH22{WV z76uZN4>FodG6M|)i2_{<2GUR(rcKfnsK5rOfE6mi38k5#77I246?gy@z+A*I*^x@;;gbfdaGB-KyRO)1d!5(PUuN&P z4CqQmhJXD3fHcg@AV;zE#pb6QAMPr8{q?Eto%wIy#A^GUjgfg`$OG19+Rz_bHe5g08=FrVu##0`6Pu69XnEaN-d2%pY%H$iY5u07u z)EPNnKttls+fWeIc}NOg;a=^4ffzJC_b z)Wyg%`4*??WH~NP{?xM6yb|4#eBJz{tkmR^$^W^eC(q;7p4`kWJ$VLKG?-4}5@80q mYVvz7S7x9?C)ab!PY&bO6#%*g43hoQ+{=QB{U!&p%>V#fx9Xq( delta 877 zcmZ1}`A}klmKqZS1H&p&L%TispS+SY76|1R>BO>aZt^;_Qf!_7_2ut5?iPn%-qF(QZvmy4pOOX;XjR+ETWKP0p<= zdKrQG876+Up4`C5G1-BUh1U#d7|;R+DIn&YypU0!w-(590Ez-B2DZs_8I3vj0$Ct+ zOp_lnnhX91@@#-SRv^s*#LOUFg4RHjJ%FNM3xJ|ZV9{nE*9~eGNQP#$FhBxzhMZJ>0_2k?h z4O`Z}n{N7T8S%R}{@|~i%*!eL0|z2c_0V@it5X<09l~a2MRD|D7yoy!fx_Z z4t;S@nt`PO0Y)1`Jp(-h1_rsw2RS6AVQCDOW;ht*O!X}EjDe|f@>dQ6W-~p@$uXQ# zDzLN(OKVJwaRz#3dPWQk6F7mE0>K5&$qk$pQlEiLP$F)zFg?Rq!S@f8f9#q^#8B$!=U)lk2&pCx>y1fUP>nRW-Sg+mRXQg2@NDAoC7t@%eRZ?(rDYRh4UMn;mjf%yk)P9A6gDw@JWUL@g1zX<5#nD9_ zPO@}tzlEdt32y9CF!#spz2WZOC-434AkXX6czZTx2ZlMXSMufVykE`V(yydr!o+ld znPDN94O>jGvg*LiJtGH(bw>*)D>_@?_;e97M3NJke1+25yDE=rY8V4FY#&4JZlq z_Yo0U4@6}-*)D=L@!*jh%G;@}&KK43+^#%7LMcNjM=9Mxb5Y7r%27%kG#8}|r5vTS zfaao@y={A~+Qif8l>5l&MWo3>h%!$25W`_kM??gGOSFTs;htft{ z`jq&dG*~()4Q9SbS@|l3`znP7!o@h~!X!A?ZVQ{&!N1Mfo#|(3Y^3j{%YBzo^|Wsa zo1;5vdmXx2qb_&k9lfT!2yW SNT