55
66import dataclasses
77from functools import partial , wraps
8- from typing import TYPE_CHECKING , Any , Callable , Literal , Sequence
8+ from typing import (
9+ TYPE_CHECKING ,
10+ Any ,
11+ Callable ,
12+ Dict ,
13+ List ,
14+ Literal ,
15+ Sequence ,
16+ Union ,
17+ cast ,
18+ )
919
1020from gradio_client .documentation import document
1121from jinja2 import Template
@@ -145,6 +155,32 @@ class EventListenerMethod:
145155 event_name : str
146156
147157
158+ if TYPE_CHECKING :
159+ EventListenerCallable = Callable [
160+ [
161+ Union [Callable , None ],
162+ Union [Component , Sequence [Component ], None ],
163+ Union [Block , Sequence [Block ], Sequence [Component ], Component , None ],
164+ Union [str , None , Literal [False ]],
165+ bool ,
166+ Literal ["full" , "minimal" , "hidden" ],
167+ Union [bool , None ],
168+ bool ,
169+ int ,
170+ bool ,
171+ bool ,
172+ Union [Dict [str , Any ], List [Dict [str , Any ]], None ],
173+ Union [float , None ],
174+ Union [Literal ["once" , "multiple" , "always_last" ], None ],
175+ Union [str , None ],
176+ Union [int , None , Literal ["default" ]],
177+ Union [str , None ],
178+ bool ,
179+ ],
180+ Dependency ,
181+ ]
182+
183+
148184class EventListener (str ):
149185 def __new__ (cls , event_name , * _args , ** _kwargs ):
150186 return super ().__new__ (cls , event_name )
@@ -331,7 +367,7 @@ def inner(*args, **kwargs):
331367
332368
333369def on (
334- triggers : Sequence [Any ] | Any | None = None ,
370+ triggers : Sequence [EventListenerCallable ] | EventListenerCallable | None = None ,
335371 fn : Callable | None | Literal ["decorator" ] = "decorator" ,
336372 inputs : Component | list [Component ] | set [Component ] | None = None ,
337373 outputs : Block | list [Block ] | list [Component ] | None = None ,
@@ -376,8 +412,10 @@ def on(
376412 """
377413 from gradio .components .base import Component
378414
379- if isinstance (triggers , EventListener ):
380- triggers = [triggers ]
415+ triggers_typed = cast (EventListener , triggers )
416+
417+ if isinstance (triggers_typed , EventListener ):
418+ triggers_typed = [triggers_typed ]
381419 if isinstance (inputs , Component ):
382420 inputs = [inputs ]
383421
@@ -418,18 +456,18 @@ def inner(*args, **kwargs):
418456 if root_block is None :
419457 raise Exception ("Cannot call on() outside of a gradio.Blocks context." )
420458 if triggers is None :
421- triggers = (
459+ methods = (
422460 [EventListenerMethod (input , "change" ) for input in inputs ]
423461 if inputs is not None
424462 else []
425463 ) # type: ignore
426464 else :
427- triggers = [
428- EventListenerMethod (t .__self__ if t .has_trigger else None , t .event_name )
429- for t in triggers
430- ] # type: ignore
465+ methods = [
466+ EventListenerMethod (t .__self__ if t .has_trigger else None , t .event_name ) # type: ignore
467+ for t in triggers_typed
468+ ]
431469 dep , dep_index = root_block .set_event_trigger (
432- triggers ,
470+ methods ,
433471 fn ,
434472 inputs ,
435473 outputs ,
@@ -448,7 +486,7 @@ def inner(*args, **kwargs):
448486 show_api = show_api ,
449487 trigger_mode = trigger_mode ,
450488 )
451- set_cancel_events (triggers , cancels )
489+ set_cancel_events (methods , cancels )
452490 return Dependency (None , dep .get_config (), dep_index , fn )
453491
454492
0 commit comments