46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from typing import Self, Callable, Any
|
|
|
|
class EventsManager:
|
|
|
|
def __init__(self:Self) -> None:
|
|
self.__events:list[Callable[[Any|None], Any|None]] = []
|
|
|
|
def execute(self:Self, *arguments:tuple[Any|None, ...]) -> tuple[Any|None]:
|
|
|
|
results:tuple[Any|None] = ()
|
|
|
|
for event in self.__events:
|
|
if event is not None:
|
|
results += (event(*arguments),)
|
|
|
|
return results
|
|
|
|
def add(self:Self,
|
|
event:Callable[[Any|None], Any|None]
|
|
) -> int|None:
|
|
|
|
i:int|None = None
|
|
|
|
if callable(event):
|
|
|
|
l:int = len(self.__events)
|
|
|
|
i = 0
|
|
while i < l and self.__events[i] is not None:
|
|
i += 1
|
|
|
|
if i < l:
|
|
self.__events[i] = event
|
|
else:
|
|
self.__events.append(event)
|
|
|
|
return i
|
|
|
|
def remove(self:Self, i:int) -> bool:
|
|
if 0 <= i < len(self.__events) and self.__events[i] is not None:
|
|
self.__events[i] = None
|
|
return True
|
|
return False |