if not os.path.isabs(aof):
aof = os.path.join(os.path.dirname(f),aof)
files.append(aof)
- for var in bb_data.keys():
- if data.getVarFlag(var, "handler", bb_data) and data.getVar(var, bb_data):
- event.register(data.getVar(var, bb_data))
self.pkgdata[f] = bb_data
# now inform the caller
NotHandled = 0
Handled = 1
-handlers = []
+_handlers = []
+_handlers_dict = {}
def tmpHandler(event):
"""Default handler for code events"""
def fire(event):
"""Fire off an Event"""
- for h in handlers:
+ for h in _handlers:
if type(h).__name__ == "code":
exec(h)
if tmpHandler(event) == Handled:
return Handled
return NotHandled
-def register(handler):
+def register(name, handler):
"""Register an Event handler"""
+
+ # already registered
+ if name in _handlers_dict:
+ return;
+
if handler is not None:
# handle string containing python code
if type(handler).__name__ == "str":
- return _registerCode(handler)
-# prevent duplicate registration
- if not handler in handlers:
- handlers.append(handler)
+ _registerCode(handler)
+ else:
+ _handlers.append(handler)
+
+ _handlers_dict[name] = 1
def _registerCode(handlerStr):
"""Register a 'code' Event.
tmp = "def tmpHandler(e):\n%s" % handlerStr
comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._registerCode")
# prevent duplicate registration
- if not comp in handlers:
- handlers.append(comp)
+ _handlers.append(comp)
-def remove(handler):
+def remove(name, handler):
"""Remove an Event handler"""
- for h in handlers:
- if type(handler).__name__ == "str":
- return _removeCode(handler)
- if handler is h:
- handlers.remove(handler)
+ _handlers_dict.pop(name)
+ if type(handler).__name__ == "str":
+ return _removeCode(handler)
+ else:
+ _handlers.remove(handler)
def _removeCode(handlerStr):
"""Remove a 'code' Event handler
Deprecated interface; call remove instead."""
tmp = "def tmpHandler(e):\n%s" % handlerStr
comp = bb.utils.better_compile(tmp, "tmpHandler(e)", "bb.event._removeCode")
- handlers.remove(comp)
+ _handlers.remove(comp)
def getName(e):
"""Returns the name of a class or class instance"""
for var in data.keys(d):
if data.getVarFlag(var, 'handler', d):
- bb.event.register(data.getVar(var, d))
+ bb.event.register(var, data.getVar(var, d))
continue
if not data.getVarFlag(var, 'task', d):
bb.utils.better_exec(comp, __builtins__, text, fn)
funcs = data.getVar('__functions__', d) or ""
data.setVar('__functions__', "%s\n%s" % (funcs, text), d)
-
__body__ = []
__inpython__ = False