1+ from typing import Callable , Optional , TypeAlias , TypedDict
2+
3+ from i3ipc .connection import Connection
4+ from i3ipc .events import IpcBaseEvent
5+
6+ Handler : TypeAlias = Callable [[Connection , IpcBaseEvent ], None ]
7+
8+
9+ class Subscription (TypedDict ):
10+ event : str
11+ detail : Optional [str ]
12+ handler : Handler
13+
14+
115class PubSub (object ):
2- def __init__ (self , conn ):
16+ def __init__ (self , conn : Connection ):
317 self .conn = conn
4- self ._subscriptions = []
18+ self ._subscriptions : list [ Subscription ] = []
519
6- def subscribe (self , detailed_event , handler ):
20+ def subscribe (self , detailed_event : str , handler : Handler ):
721 event = detailed_event .replace ('-' , '_' )
822 detail = ''
923
@@ -12,10 +26,10 @@ def subscribe(self, detailed_event, handler):
1226
1327 self ._subscriptions .append ({'event' : event , 'detail' : detail , 'handler' : handler })
1428
15- def unsubscribe (self , handler ):
29+ def unsubscribe (self , handler : Handler ):
1630 self ._subscriptions = list (filter (lambda s : s ['handler' ] != handler , self ._subscriptions ))
1731
18- def emit (self , event , data ):
32+ def emit (self , event : str , data : Optional [ IpcBaseEvent ] ):
1933 detail = ''
2034
2135 if data and hasattr (data , 'change' ):
@@ -27,4 +41,4 @@ def emit(self, event, data):
2741 if data :
2842 s ['handler' ](self .conn , data )
2943 else :
30- s ['handler' ](self .conn )
44+ s ['handler' ](self .conn ) # type: ignore[call-arg]
0 commit comments