summaryrefslogtreecommitdiffstats
path: root/lib/bb/event.py
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2006-03-22 13:48:02 +0000
committerHolger Hans Peter Freyther <zecke@selfish.org>2006-03-22 13:48:02 +0000
commitd278633c0bebe89ab2490856f57540fe263bb545 (patch)
treec420bbcf1b13676e4e667a996de75df5bf2102bf /lib/bb/event.py
parente745c0f774837f15e908aca66c175df800030aa7 (diff)
downloadbitbake-d278633c0bebe89ab2490856f57540fe263bb545.tar.gz
bin/bitbake:
-Do not add handlers again. It is 'fast' enough to iterate over them in the BBHandler do not add them in bitbake again. This temporarily breaks the cache - which will be fixed shortly lib/bb/event.py: -Have a data structure that operates faster on lookups -Change register/remove to take a 'name' parameter lib/bb/parse/parse_py/BBHandler.py: -Update to the new event.register syntax
Diffstat (limited to 'lib/bb/event.py')
-rw-r--r--lib/bb/event.py38
1 files changed, 22 insertions, 16 deletions
diff --git a/lib/bb/event.py b/lib/bb/event.py
index cbe6d2a11..6e5bf2ff1 100644
--- a/lib/bb/event.py
+++ b/lib/bb/event.py
@@ -44,7 +44,8 @@ class Event:
NotHandled = 0
Handled = 1
-handlers = []
+_handlers = []
+_handlers_dict = {}
def tmpHandler(event):
"""Default handler for code events"""
@@ -57,7 +58,7 @@ def defaultTmpHandler():
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:
@@ -67,15 +68,21 @@ def fire(event):
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.
@@ -88,24 +95,23 @@ def _registerCode(handlerStr):
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"""