|
3 | 3 |
|
4 | 4 | from .log import logger |
5 | 5 |
|
6 | | -T = TypeVar("T") |
| 6 | +T_contra = TypeVar("T_contra", contravariant=True) |
7 | 7 |
|
8 | 8 |
|
9 | | -class EventEmitter(Generic[T]): |
| 9 | +class EventEmitter(Generic[T_contra]): |
10 | 10 | def __init__(self) -> None: |
11 | 11 | """ |
12 | 12 | Initialize a new instance of EventEmitter. |
13 | 13 | """ |
14 | | - self._events: Dict[T, Set[Callable]] = dict() |
| 14 | + self._events: Dict[T_contra, Set[Callable]] = dict() |
15 | 15 |
|
16 | | - def emit(self, event: T, *args) -> None: |
| 16 | + def emit(self, event: T_contra, *args) -> None: |
17 | 17 | """ |
18 | 18 | Trigger all callbacks associated with the given event. |
19 | 19 |
|
@@ -60,7 +60,7 @@ def greet(name): |
60 | 60 | except Exception: |
61 | 61 | logger.exception(f"failed to emit event {event}") |
62 | 62 |
|
63 | | - def once(self, event: T, callback: Optional[Callable] = None) -> Callable: |
| 63 | + def once(self, event: T_contra, callback: Optional[Callable] = None) -> Callable: |
64 | 64 | """ |
65 | 65 | Register a callback to be called only once when the event is emitted. |
66 | 66 |
|
@@ -116,7 +116,7 @@ def decorator(callback: Callable) -> Callable: |
116 | 116 |
|
117 | 117 | return decorator |
118 | 118 |
|
119 | | - def on(self, event: T, callback: Optional[Callable] = None) -> Callable: |
| 119 | + def on(self, event: T_contra, callback: Optional[Callable] = None) -> Callable: |
120 | 120 | """ |
121 | 121 | Register a callback to be called whenever the event is emitted. |
122 | 122 |
|
@@ -168,7 +168,7 @@ def decorator(callback: Callable) -> Callable: |
168 | 168 |
|
169 | 169 | return decorator |
170 | 170 |
|
171 | | - def off(self, event: T, callback: Callable) -> None: |
| 171 | + def off(self, event: T_contra, callback: Callable) -> None: |
172 | 172 | """ |
173 | 173 | Unregister a callback from an event. |
174 | 174 |
|
|
0 commit comments