event: improve output for syntax errors in handlers

Note: this includes IndentationError, which is a subclass of SyntaxError.

(Bitbake rev: 156ea134e82d873ca4b5343261da2291a2b32ef6)

Signed-off-by: Chris Larson <chris_larson@mentor.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Chris Larson 2011-04-04 13:51:51 -07:00 committed by Richard Purdie
parent 37cb4cc02b
commit fc801b9073
1 changed files with 9 additions and 3 deletions

View File

@ -150,6 +150,7 @@ def fire_from_worker(event, d):
event = pickle.loads(event[7:-8])
fire_ui_handlers(event, d)
noop = lambda _: None
def register(name, handler):
"""Register an Event handler"""
@ -161,10 +162,15 @@ def register(name, handler):
# handle string containing python code
if isinstance(handler, basestring):
tmp = "def %s(e):\n%s" % (name, handler)
comp = bb.utils.better_compile(tmp, "%s(e)" % name,
"bb.event._registerCode")
try:
code = compile(tmp, "%s(e)" % name, "exec")
except SyntaxError:
logger.error("Unable to register event handler '%s':\n%s", name,
''.join(traceback.format_exc(limit=0)))
_handlers[name] = noop
return
env = {}
bb.utils.simple_exec(comp, env)
bb.utils.simple_exec(code, env)
func = bb.utils.better_eval(name, env)
_handlers[name] = func
else: