mirror of
https://github.com/gradio-app/gradio.git
synced 2025-04-06 12:30:29 +08:00
Fix gr.SelectData
so that the target attribute is correctly attached, and the filedata is included in the data attribute with gr.Gallery
(#5798)
* fix select * add changeset * add changeset * restore * refactor * add pytest * typo --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
This commit is contained in:
parent
37e70842d5
commit
a0d3cc45c6
6
.changeset/afraid-radios-vanish.md
Normal file
6
.changeset/afraid-radios-vanish.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
"@gradio/gallery": patch
|
||||
"gradio": patch
|
||||
---
|
||||
|
||||
fix:Fix `gr.SelectData` so that the target attribute is correctly attached, and the filedata is included in the data attribute with `gr.Gallery`
|
@ -14,6 +14,7 @@ from gradio.helpers import EventData
|
||||
from gradio.state_holder import SessionState
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from gradio.blocks import Blocks
|
||||
from gradio.routes import App
|
||||
|
||||
set_documentation_group("routes")
|
||||
@ -186,22 +187,30 @@ def restore_session_state(app: App, body: PredictBody):
|
||||
return session_state, iterators
|
||||
|
||||
|
||||
def prepare_event_data(
|
||||
blocks: Blocks,
|
||||
body: PredictBody,
|
||||
fn_index_inferred: int,
|
||||
) -> EventData:
|
||||
dependency = blocks.dependencies[fn_index_inferred]
|
||||
target = dependency["targets"][0] if len(dependency["targets"]) else None
|
||||
event_data = EventData(
|
||||
blocks.blocks.get(target[0]) if target else None,
|
||||
body.event_data,
|
||||
)
|
||||
return event_data
|
||||
|
||||
|
||||
async def call_process_api(
|
||||
app: App,
|
||||
body: PredictBody,
|
||||
gr_request: Union[Request, list[Request]],
|
||||
fn_index_inferred,
|
||||
fn_index_inferred: int,
|
||||
):
|
||||
session_state, iterators = restore_session_state(app=app, body=body)
|
||||
|
||||
dependency = app.get_blocks().dependencies[fn_index_inferred]
|
||||
|
||||
target = dependency["targets"][0] if len(dependency["targets"]) else None
|
||||
event_data = EventData(
|
||||
app.get_blocks().blocks.get(target) if target else None,
|
||||
body.event_data,
|
||||
)
|
||||
|
||||
event_data = prepare_event_data(app.get_blocks(), body, fn_index_inferred)
|
||||
event_id = getattr(body, "event_id", None)
|
||||
|
||||
fn_index = body.fn_index
|
||||
|
@ -134,7 +134,7 @@
|
||||
if (selected_index !== null) {
|
||||
dispatch("select", {
|
||||
index: selected_index,
|
||||
value: _value?.[selected_index][1]
|
||||
value: [_value?.[selected_index][0].data, _value?.[selected_index][1]]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
19
test/test_route_utils.py
Normal file
19
test/test_route_utils.py
Normal file
@ -0,0 +1,19 @@
|
||||
import gradio as gr
|
||||
from gradio.data_classes import PredictBody
|
||||
from gradio.helpers import EventData
|
||||
from gradio.route_utils import prepare_event_data
|
||||
|
||||
|
||||
def test_prepare_event_data():
|
||||
def on_select(evt: gr.SelectData):
|
||||
return f"You selected {evt.value} at {evt.index} from {evt.target}"
|
||||
|
||||
with gr.Blocks() as demo:
|
||||
textbox = gr.Textbox("Hello World!")
|
||||
statement = gr.Textbox()
|
||||
textbox.select(on_select, None, statement)
|
||||
|
||||
body = PredictBody(data=[], event_data={"value": "World", "index": [6, 11]})
|
||||
event_data = prepare_event_data(demo, body, 0)
|
||||
correct_event_data = EventData(textbox, {"value": "World", "index": [6, 11]})
|
||||
assert vars(event_data) == vars(correct_event_data)
|
Loading…
x
Reference in New Issue
Block a user