17
17
from .logging import log
18
18
from .slot import Slot
19
19
20
+ P = ParamSpec ('P' )
21
+
20
22
21
23
@dataclass (** KWONLY_SLOTS )
22
- class Callback :
23
- func : Callable
24
+ class Callback ( Generic [ P ]) :
25
+ func : Callable [ P , Any ] | Callable [[], Any ]
24
26
filepath : str
25
27
line : int
26
28
slot : weakref .ref [Slot ] | None = None
@@ -36,14 +38,11 @@ async def await_result(self, result: Awaitable | AwaitableResponse | asyncio.Tas
36
38
return await result
37
39
38
40
39
- P = ParamSpec ('P' )
40
-
41
-
42
41
class Event (Generic [P ]):
43
42
instances : ClassVar [list [Event ]] = []
44
43
45
44
def __init__ (self ) -> None :
46
- self .callbacks : list [Callback ] = []
45
+ self .callbacks : list [Callback [ P ] ] = []
47
46
self .instances .append (self )
48
47
49
48
def subscribe (self , callback : Callable [P , Any ] | Callable [[], Any ]) -> None :
@@ -126,7 +125,7 @@ def __await__(self):
126
125
return self .emitted ().__await__ ()
127
126
128
127
129
- def _invoke_and_forget (callback : Callback , * args : P .args , ** kwargs : P .kwargs ) -> Any :
128
+ def _invoke_and_forget (callback : Callback [ P ] , * args : P .args , ** kwargs : P .kwargs ) -> Any :
130
129
try :
131
130
result = callback .run (* args , ** kwargs )
132
131
if _should_await (result ):
@@ -138,7 +137,7 @@ def _invoke_and_forget(callback: Callback, *args: P.args, **kwargs: P.kwargs) ->
138
137
log .exception ('Could not emit callback %s' , callback )
139
138
140
139
141
- async def _invoke_and_await (callback : Callback , * args : P .args , ** kwargs : P .kwargs ) -> Any :
140
+ async def _invoke_and_await (callback : Callback [ P ] , * args : P .args , ** kwargs : P .kwargs ) -> Any :
142
141
try :
143
142
result = callback .run (* args , ** kwargs )
144
143
if _should_await (result ):
0 commit comments