dispatch.py 1.4 KB
# This file should be deprecated when we will get rid of nginx stream recording


from collections import OrderedDict
import logging


# Todo Replace all usages (nginx) by blinker
class Event(object):
    def __init__(self):
        self.__name = None

    def setName(self, name):
        self.__name = name

    def getName(self):
        return self.__name


class EventDispatcher(object):
    def __init__(self):
        self._listeners = {}

    def dispatch(self, eventName):
        logging.info("Dispatching " + eventName)
        if eventName not in self._listeners:
            return
        for listener in self._listeners[eventName].values():
            # TODO : store arguments
            listener()
        return

    def addListener(self, eventName, listener, priority=0):
        if eventName not in self._listeners:
            self._listeners[eventName] = {}
        self._listeners[eventName][priority] = listener
        self._listeners[eventName] = OrderedDict(sorted(self._listeners[eventName].items(), key=lambda item: item[0]))

    def removeListener(self, eventName, listener=None):
        if eventName not in self._listeners:
            return
        if not listener:
            del self._listeners[eventName]
        else:
            for p, l in self._listeners[eventName].items():
                if l is listener:
                    self._listeners[eventName].pop(p)
                    return