From 327d7d6e3863e33418123eb7fe992c21a50d590a Mon Sep 17 00:00:00 2001 From: Benjamin Barrera-Altuna Date: Sun, 19 Apr 2026 17:23:50 -0400 Subject: [PATCH 1/2] Fix upload on_drop_rejected args spec --- .../src/reflex_components_core/core/upload.py | 5 +++-- pyi_hashes.json | 2 +- tests/units/components/core/test_upload.py | 9 ++++++++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/reflex-components-core/src/reflex_components_core/core/upload.py b/packages/reflex-components-core/src/reflex_components_core/core/upload.py index 84b3ef06f06..642ef851749 100644 --- a/packages/reflex-components-core/src/reflex_components_core/core/upload.py +++ b/packages/reflex-components-core/src/reflex_components_core/core/upload.py @@ -177,6 +177,7 @@ def get_upload_url(file_path: str | Var[str]) -> Var[str]: _on_drop_spec, passthrough_event_spec(UploadChunkIterator), ) +_on_drop_rejected_spec = passthrough_event_spec(list[dict[str, Any]]) _UPLOAD_FILES_CLIENT_HANDLER = "uploadFiles" @@ -220,7 +221,7 @@ class GhostUpload(Fragment): # Fired when files are dropped. on_drop: EventHandler[_on_drop_args_spec] - on_drop_rejected: EventHandler[_on_drop_spec] = field( + on_drop_rejected: EventHandler[_on_drop_rejected_spec] = field( doc="Fired when dropped files do not meet the specified criteria." ) @@ -264,7 +265,7 @@ class Upload(MemoizationLeaf): # Fired when files are dropped. on_drop: EventHandler[_on_drop_args_spec] - on_drop_rejected: EventHandler[_on_drop_spec] = field( + on_drop_rejected: EventHandler[_on_drop_rejected_spec] = field( doc="Fired when dropped files do not meet the specified criteria." ) diff --git a/pyi_hashes.json b/pyi_hashes.json index 5c8a1ad6665..72279f55c9e 100644 --- a/pyi_hashes.json +++ b/pyi_hashes.json @@ -20,7 +20,7 @@ "packages/reflex-components-core/src/reflex_components_core/core/helmet.pyi": "7fd81a99bde5b0ff94bb52523597fd5c", "packages/reflex-components-core/src/reflex_components_core/core/html.pyi": "753d6ae315369530dad450ed643f5be6", "packages/reflex-components-core/src/reflex_components_core/core/sticky.pyi": "ba60a7d9cba75b27a1133bd63a9fbd59", - "packages/reflex-components-core/src/reflex_components_core/core/upload.pyi": "17775edb94cc804686ae4cd873584810", + "packages/reflex-components-core/src/reflex_components_core/core/upload.pyi": "48bccd1cf1cedaf24503e7dbd2c0b02b", "packages/reflex-components-core/src/reflex_components_core/core/window_events.pyi": "cab827931770be082cd1598a9908abbc", "packages/reflex-components-core/src/reflex_components_core/datadisplay/__init__.pyi": "c96fed4da42a13576d64f84e3c7cb25c", "packages/reflex-components-core/src/reflex_components_core/el/__init__.pyi": "f09129ddefb57ab4c7769c86dc9a3153", diff --git a/tests/units/components/core/test_upload.py b/tests/units/components/core/test_upload.py index 8b6f31db3c6..86037d2b7f7 100644 --- a/tests/units/components/core/test_upload.py +++ b/tests/units/components/core/test_upload.py @@ -1,7 +1,7 @@ from typing import Any, cast import pytest -from reflex_base.event import EventChain, EventHandler, EventSpec +from reflex_base.event import EventChain, EventHandler, EventSpec, parse_args_spec from reflex_base.vars.base import LiteralVar, Var from reflex_components_core.core.upload import ( StyledUpload, @@ -76,6 +76,13 @@ def test__on_drop_spec(): assert isinstance(_on_drop_spec(LiteralVar.create([])), tuple) +def test_on_drop_rejected_uses_file_rejection_payload_spec(): + rejected_spec = Upload.get_event_triggers()["on_drop_rejected"] + placeholders, _ = parse_args_spec(rejected_spec) + + assert placeholders[0]._var_type == list[dict[str, Any]] + + def test_upload_files_chunk_requires_background(): with pytest.raises(TypeError) as err: event.resolve_upload_chunk_handler_param( From c6ff44b92e213e95cd613b945114efb2a2d44df1 Mon Sep 17 00:00:00 2001 From: Farhan Ali Raza Date: Tue, 21 Apr 2026 00:49:32 +0500 Subject: [PATCH 2/2] test(upload): parametrize on_drop_rejected spec check over GhostUpload too --- tests/units/components/core/test_upload.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/units/components/core/test_upload.py b/tests/units/components/core/test_upload.py index 86037d2b7f7..d3a1e4c19aa 100644 --- a/tests/units/components/core/test_upload.py +++ b/tests/units/components/core/test_upload.py @@ -4,6 +4,7 @@ from reflex_base.event import EventChain, EventHandler, EventSpec, parse_args_spec from reflex_base.vars.base import LiteralVar, Var from reflex_components_core.core.upload import ( + GhostUpload, StyledUpload, Upload, UploadNamespace, @@ -76,8 +77,9 @@ def test__on_drop_spec(): assert isinstance(_on_drop_spec(LiteralVar.create([])), tuple) -def test_on_drop_rejected_uses_file_rejection_payload_spec(): - rejected_spec = Upload.get_event_triggers()["on_drop_rejected"] +@pytest.mark.parametrize("component", [Upload, GhostUpload]) +def test_on_drop_rejected_uses_file_rejection_payload_spec(component): + rejected_spec = component.get_event_triggers()["on_drop_rejected"] placeholders, _ = parse_args_spec(rejected_spec) assert placeholders[0]._var_type == list[dict[str, Any]]