]> git.ipfire.org Git - thirdparty/openembedded/openembedded-core-contrib.git/commitdiff
cooker: encode event objects to base64
authorEd Bartosh <ed.bartosh@linux.intel.com>
Mon, 20 Jun 2016 11:00:49 +0000 (14:00 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 20 Jun 2016 16:23:34 +0000 (17:23 +0100)
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]

Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
lib/bb/cooker.py

index b2cf0cda17e824eb84dc8f1ca706b30d4c530afb..2de6b3e0dd5435b2d46f81ccfe915487ba36e784 100644 (file)
@@ -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())