summaryrefslogtreecommitdiff
path: root/bitbake/lib/bb/event.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/event.py')
-rw-r--r--bitbake/lib/bb/event.py33
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
-