From e28b36e1e8b2d6b1531698d6d50658e3fc73adc0 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Mon, 20 Jun 2016 14:00:49 +0300 Subject: bitbake: cooker: encode event objects to base64 pickle converts python objects into the binary form that can't be decoded to text and therefore can't be converted to JSON format. Attempt to convert event objects raises this error: TypeError: b'\x80\x03cbb.runqueue\nrunQueueTaskSkipped\nq\x00)... is not JSON serializable Encoded pickled event objects to base64 to be able to convert data structure to JSON. [YOCTO #9803] (Bitbake rev: f18055237e6084f90f6221442e3ba021dcc59c50) Signed-off-by: Ed Bartosh Signed-off-by: Richard Purdie --- bitbake/lib/bb/cooker.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index b2cf0cda17..2de6b3e0dd 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -44,6 +44,7 @@ import prserv.serv import pyinotify import json import pickle +import codecs logger = logging.getLogger("BitBake") collectlog = logging.getLogger("BitBake.Collection") @@ -143,7 +144,9 @@ class EventLogWriteHandler: def write_event(self, event): with open(self.eventfile, "a") as f: try: - f.write("%s\n" % json.dumps({"class":event.__module__ + "." + event.__class__.__name__, "vars":json.dumps(pickle.dumps(event)) })) + str_event = codecs.encode(pickle.dumps(event), 'base64').decode('utf-8') + f.write("%s\n" % json.dumps({"class": event.__module__ + "." + event.__class__.__name__, + "vars": str_event})) except Exception as e: import traceback print(e, traceback.format_exc()) -- cgit v1.2.3-54-g00ecf