1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 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