Ready
This commit is contained in:
parent
650618f1f5
commit
781388f8d8
14
README.md
14
README.md
@ -1,3 +1,15 @@
|
||||
# EventsSystem
|
||||
|
||||
EventsSystem module
|
||||
EventsSystem module
|
||||
|
||||
!!! Запуск происходит до инициализации ядра
|
||||
|
||||
luguru настроен под формат:
|
||||
```python
|
||||
fmt = "<green>{elapsed} -- {time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level:<8}</level> | {extra[module]:^12} | {extra[prefix]:<12} | {message}"
|
||||
```
|
||||
|
||||
Добавление в проект:
|
||||
```bash
|
||||
git submodule add ssh://git@git.anidev.ru:222/roden-soft/EventsSystem.git src/modules/EventsSystem
|
||||
```
|
||||
|
39
events.py
Normal file
39
events.py
Normal file
@ -0,0 +1,39 @@
|
||||
import builtins
|
||||
|
||||
from loguru import logger
|
||||
|
||||
|
||||
class EventsSystem:
|
||||
def __init__(self):
|
||||
self.log = logger.bind(module="EventsSystem", prefix="EVENTS")
|
||||
self.__events = {}
|
||||
logger.debug("Injected to builtins")
|
||||
builtins.event = self
|
||||
logger.debug("EventsSystem ready")
|
||||
|
||||
def register(self, event_name, callback):
|
||||
log = self.log.bind(prefix="register")
|
||||
log.debug(f"{event_name!r}; {callback.__name__}({callback})")
|
||||
if not callable(callback):
|
||||
return log.error(f"Bad event '{event_name}' - cannot registered")
|
||||
if event_name not in self.__events:
|
||||
self.__events.update({str(event_name): [callback]})
|
||||
else:
|
||||
self.__events[event_name].append(callback)
|
||||
|
||||
def call(self, event_name, *args, **kwargs):
|
||||
log = self.log.bind(prefix="call")
|
||||
funcs_data = []
|
||||
if event_name in self.__events.keys():
|
||||
for callback in self.__events[event_name]:
|
||||
log.debug(f"{event_name!r}; execute: '{callback.__name__}'; data: {args=}; {kwargs=}")
|
||||
try:
|
||||
event_data = {"event_name": event_name, "args": args, "kwargs": kwargs}
|
||||
funcs_data.append(callback(event_data))
|
||||
except Exception as e:
|
||||
log.error(f"Error in {callback.__name__}. See debug.log")
|
||||
log.exception(e)
|
||||
else:
|
||||
log.error(f"Event '{event_name}' not found.")
|
||||
|
||||
return funcs_data
|
Loading…
x
Reference in New Issue
Block a user