minimalistic event system
Installation via pip
https://pypi.org/project/visitoolkit-eventsystem
(runs on Python 3)
Registered handlers (a bag of handlers) getting called when event gets fired
using ideas from "axel events" https://github.com/axel-events/axel
and "event system" from http://www.valuedlessons.com/2008/04/events-in-python.html
from visitoolkit_eventsystem import eventsystem
# handlers are callback functions in your code,
# when firing an event visitoolkit_eventsystem will call them with the given argument(s)
def cb1(event_id, *arg, **args):
if event_id > 0:
# handle event...
return True
else:
return False
# Default is synchronous execution of handlers (blocking main thread, collecting all results)
# sync_mode=False means asynchronous execution of handlers (one background thread calls all handlers)
# =>Details about flag "exc_info"(default is True): https://docs.python.org/3/library/sys.html#sys.exc_info
# =>Flag "traceback" (default is False) controls verbosity of error_info when an exception occurred
es = eventsystem.EventSystem(sync_mode=True)
# adding or removing handlers in list-like syntax
es += cb1
#The execution result is returned as a list containing all results per handler having this structure:
# exec_result = [
# (True, result, handler), # on success
# (False, error_info, handler), # on error
# (None, None, handler), ... # asynchronous execution
# ]
# firing event
result = es(42)
Increasing logging level for bughunting:
import logging
logging.getLogger('visitoolkit_eventsystem').setLevel(logging.DEBUG)
visitoolkit_eventsystem is used in visitoolkit_connector as core part of visitoolkit.
visitoolkit is written for the proprietary Building and Process Management System
'ProMoS NT' (c) MST Systemtechnik AG'
(also known as 'Saia Visi.Plus' (c) Saia-Burgess Controls AG)
Intention:
Support creator of visualisation projects...
Add efficiency...
Reduce manual error-prone processes...
Add missing features...
Disclaimer: Use 'visitoolkit' at your own risk!