MCPcopy Create free account
hub / github.com/FreeOpcUa/python-opcua / CallbackDispatcher

Class CallbackDispatcher

opcua/common/callback.py:47–97  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45
46
47class CallbackDispatcher(object):
48 def __init__(self):
49 self._listeners = {}
50
51 def dispatch(self, eventName, event=None):
52 if event is None:
53 event = Callback()
54 elif not isinstance(event, Callback):
55 raise ValueError('Unexpected event type given')
56 event.setName(eventName)
57 if eventName not in self._listeners:
58 return event
59 for listener in self._listeners[eventName].values():
60 listener(event, self)
61 return event
62
63 def addListener(self, eventName, listener, priority=0):
64 if eventName not in self._listeners:
65 self._listeners[eventName] = {}
66 self._listeners[eventName][priority] = listener
67 self._listeners[eventName] = OrderedDict(sorted(self._listeners[eventName].items(), key=lambda item: item[0]))
68
69 def removeListener(self, eventName, listener=None):
70 if eventName not in self._listeners:
71 return
72 if not listener:
73 del self._listeners[eventName]
74 else:
75 for p, l in self._listeners[eventName].items():
76 if l is listener:
77 self._listeners[eventName].pop(p)
78 return
79
80 def addSubscriber(self, subscriber):
81 if not isinstance(subscriber, CallbackSubscriberInterface):
82 raise ValueError('Unexpected subscriber type given')
83 for eventName, params in subscriber.getSubscribedEvents().items():
84 if isinstance(params, str):
85 self.addListener(eventName, getattr(subscriber, params))
86 elif isinstance(params, list):
87 if not params:
88 raise ValueError('Invalid params "{0!r}" for event "{1!s}"'.format(params, eventName))
89 if len(params) <= 2 and isinstance(params[0], str):
90 priority = params[1] if len(params) > 1 else 0
91 self.addListener(eventName, getattr(subscriber, params[0]), priority)
92 else:
93 for listener in params:
94 priority = listener[1] if len(listener) > 1 else 0
95 self.addListener(eventName, getattr(subscriber, listener[0]), priority)
96 else:
97 raise ValueError('Invalid params for event "{0!s}"'.format(eventName))
98
99

Callers 1

__init__Method · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected