oncall-engine/engine/apps/mattermost/events/event_manager.py

38 lines
1.1 KiB
Python
Raw Normal View History

import logging
import typing
from rest_framework.request import Request
from apps.mattermost.events.event_handler import MattermostEventHandler
from apps.mattermost.events.types import MattermostEvent
from apps.user_management.models import User
logger = logging.getLogger(__name__)
class EventManager:
"""
Manager for mattermost events
"""
@classmethod
def process_request(cls, request: Request):
user = request.user
event = request.data
handler = cls.select_event_handler(user=user, event=event)
if handler is None:
logger.info("No event handler found")
return
logger.info(f"Processing mattermost event with handler: {handler.__class__.__name__}")
handler.process()
@staticmethod
def select_event_handler(user: User, event: MattermostEvent) -> typing.Optional[MattermostEventHandler]:
handler_classes = MattermostEventHandler.__subclasses__()
for handler_class in handler_classes:
handler = handler_class(user=user, event=event)
if handler.is_match():
return handler
return None