Source code for events
# ../events/__init__.py
"""Provides event based functionality."""
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
# Core
from core import AutoUnload
# Events
from events.manager import event_manager
# Loggers
from loggers import _sp_logger
# =============================================================================
# >> FORWARD IMPORTS
# =============================================================================
# Source.Python Imports
# Events
from _events import EventVarType
from _events import GameEvent
from _events import GameEventDescriptor
# =============================================================================
# >> ALL DECLARATION
# =============================================================================
__all__ = ('Event',
'EventVarType',
'GameEvent',
'GameEventDescriptor',
)
# =============================================================================
# >> GLOBAL VARIABLES
# =============================================================================
# Get the sp.events logger
events_logger = _sp_logger.events
# =============================================================================
# >> CLASSES
# =============================================================================
[docs]class Event(AutoUnload):
"""Event decorator class."""
def __init__(self, *event_names):
"""Store the event names."""
self._event_names = ()
self.callback = None
# Validate event names
if not event_names:
raise ValueError('At least one event name is required.')
for event_name in event_names:
if not isinstance(event_name, str):
raise ValueError('Event name must be a string.')
self._event_names = event_names
def __call__(self, callback):
"""Store the callback and register the events."""
# Store the callback
self.callback = callback
# Loop through all event names
for event_name in self._event_names:
# Register the event
event_manager.register_for_event(event_name, self.callback)
# Return the callback
return self.callback
def _unload_instance(self):
"""Unregister the events."""
# Was no callback registered?
if self.callback is None:
return
# Loop through all event names
for event_name in self._event_names:
# Unregister the event
event_manager.unregister_for_event(event_name, self.callback)