diff options
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r-- | bitbake/lib/bb/event.py | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/bitbake/lib/bb/event.py b/bitbake/lib/bb/event.py index afd5bf57c1..7731649eff 100644 --- a/bitbake/lib/bb/event.py +++ b/bitbake/lib/bb/event.py @@ -22,7 +22,8 @@ BitBake build tools. # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os, re, sys +import os, sys +import warnings import bb.utils import pickle @@ -38,7 +39,7 @@ class Event: self.pid = worker_pid NotHandled = 0 -Handled = 1 +Handled = 1 Registered = 10 AlreadyRegistered = 14 @@ -48,13 +49,25 @@ _handlers = {} _ui_handlers = {} _ui_handler_seq = 0 +# For compatibility +bb.utils._context["NotHandled"] = NotHandled +bb.utils._context["Handled"] = Handled + def fire_class_handlers(event, d): + import bb.msg + if isinstance(event, bb.msg.MsgBase): + return + for handler in _handlers: h = _handlers[handler] event.data = d if type(h).__name__ == "code": - exec(h) - tmpHandler(event) + locals = {"e": event} + bb.utils.simple_exec(h, locals) + ret = bb.utils.better_eval("tmpHandler(e)", locals) + if ret is not None: + warnings.warn("Using Handled/NotHandled in event handlers is deprecated", + DeprecationWarning, stacklevel = 2) else: h(event) del event.data @@ -76,9 +89,9 @@ def fire_ui_handlers(event, d): def fire(event, d): """Fire off an Event""" - # We can fire class handlers in the worker process context and this is + # We can fire class handlers in the worker process context and this is # desired so they get the task based datastore. - # UI handlers need to be fired in the server context so we defer this. They + # UI handlers need to be fired in the server context so we defer this. They # don't have a datastore so the datastore context isn't a problem. fire_class_handlers(event, d) @@ -91,13 +104,13 @@ def worker_fire(event, d): data = "<event>" + pickle.dumps(event) + "</event>" try: if os.write(worker_pipe, data) != len (data): - print "Error sending event to server (short write)" + print("Error sending event to server (short write)") except OSError: sys.exit(1) def fire_from_worker(event, d): if not event.startswith("<event>") or not event.endswith("</event>"): - print "Error, not an event" + print("Error, not an event") return event = pickle.loads(event[7:-8]) fire_ui_handlers(event, d) @@ -222,10 +235,11 @@ class BuildCompleted(BuildBase): class NoProvider(Event): """No Provider for an Event""" - def __init__(self, item, runtime=False): + def __init__(self, item, runtime=False, dependees=None): Event.__init__(self) self._item = item self._runtime = runtime + self._dependees = dependees def getItem(self): return self._item @@ -284,4 +298,3 @@ class DepTreeGenerated(Event): def __init__(self, depgraph): Event.__init__(self) self._depgraph = depgraph - |