[meta-freescale] [Documentation][PATCH] scripts: Migrate code to run with Python 3 and Bitbake 1.31.1

Fabio Berton fabio.berton at ossystems.com.br
Tue Sep 27 11:21:21 PDT 2016


- The urllib2 module has been split across several modules in Python
  3.0 named urllib.request and urllib.error. Adapt code to use
  urllib.request.

- Remove deprecated Python 2 function appy(). Use 2to3 script to
  generate new code.

- Adapt code to use bitbake with multi-config support.
  This feature was add on bitbake commit:
    5287991691578825c847bac2368e9b51c0ede3f0

- Adapt pickle to use Python 3.

Signed-off-by: Fabio Berton <fabio.berton at ossystems.com.br>
---
 scripts/bitbake-metadata2doc.py     |  4 +--
 scripts/bitbake-metadata2doc.sh     |  2 +-
 scripts/doc_utils.py                |  3 +-
 scripts/extract-bitbake-metadata.py | 59 +++++++++++++++++--------------------
 scripts/format_machine_list.py      |  2 +-
 scripts/generate-bugs-table.py      |  8 ++---
 scripts/test-sheet-parser.py        |  2 +-
 7 files changed, 37 insertions(+), 43 deletions(-)

diff --git a/scripts/bitbake-metadata2doc.py b/scripts/bitbake-metadata2doc.py
index 0149dd4..98af3f8 100644
--- a/scripts/bitbake-metadata2doc.py
+++ b/scripts/bitbake-metadata2doc.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 # -*- encoding: utf-8 -*-
 
 import os
@@ -496,7 +496,7 @@ gitdm_dir = sys.argv[4]
 start_commit = sys.argv[5]
 end_commit = sys.argv[6]
 
-data_fd = open(data_file, 'r')
+data_fd = open(data_file, 'rb')
 data = pickle.load(data_fd)
 data_fd.close()
 
diff --git a/scripts/bitbake-metadata2doc.sh b/scripts/bitbake-metadata2doc.sh
index a6191d1..3616fe1 100755
--- a/scripts/bitbake-metadata2doc.sh
+++ b/scripts/bitbake-metadata2doc.sh
@@ -82,7 +82,7 @@ for machine in $machines; do
     echo "Using $build_dir as build directory"
     MACHINE=$machine . ./setup-environment `basename $build_dir`
 
-    MACHINE=$machine python $anchor/extract-bitbake-metadata.py \
+    MACHINE=$machine python3 $anchor/extract-bitbake-metadata.py \
         $anchor/$marshalled_data_file \
         apptrk \
         barebox \
diff --git a/scripts/doc_utils.py b/scripts/doc_utils.py
index 9d11bd8..6125f13 100644
--- a/scripts/doc_utils.py
+++ b/scripts/doc_utils.py
@@ -19,8 +19,7 @@ def tabularize(lines, spacing=2):
 
     spc = ' ' * spacing
     if lines:
-        col_widths = map(lambda col: apply(max, map(len, col) + [0]),
-                         apply(zip, lines))
+        col_widths = [max(*list(map(len, col)) + [0]) for col in zip(*lines)]
         return '\n'.join([format_header(lines[0], col_widths, spc),
                           format_body(lines[1:], col_widths, spc),
                           format_border(col_widths)]) + \
diff --git a/scripts/extract-bitbake-metadata.py b/scripts/extract-bitbake-metadata.py
index d4b1634..8b97366 100644
--- a/scripts/extract-bitbake-metadata.py
+++ b/scripts/extract-bitbake-metadata.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 """ From https://github.com/kergoth/bb/blob/master/libexec/bbcmd.py """
 
@@ -47,7 +47,7 @@ class Tinfoil(bb.tinfoil.Tinfoil):
         bb.providers.logger.setLevel(logging.ERROR)
         bb.taskdata.logger.setLevel(logging.CRITICAL)
         self.cooker_data = None
-        self.taskdata = None
+        self.taskdata = {}
 
         self.localdata = bb.data.createCopy(self.config_data)
         self.localdata.finalize()
@@ -56,9 +56,8 @@ class Tinfoil(bb.tinfoil.Tinfoil):
 
 
     def prepare_taskdata(self, provided=None, rprovided=None):
-        self.cache_data = self.cooker.recipecache
-        if self.taskdata is None:
-            self.taskdata = bb.taskdata.TaskData(abort=False)
+        self.cache_data = self.cooker.recipecaches['']
+        self.taskdata[''] = self.taskdata.get('', bb.taskdata.TaskData(abort=False))
 
         if provided:
             self.add_provided(provided)
@@ -68,9 +67,9 @@ class Tinfoil(bb.tinfoil.Tinfoil):
 
     def add_rprovided(self, rprovided):
         for item in rprovided:
-            self.taskdata.add_rprovider(self.localdata, self.cache_data, item)
+            self.taskdata[''].add_rprovider(self.localdata, self.cache_data, item)
 
-        self.taskdata.add_unresolved(self.localdata, self.cache_data)
+        self.taskdata[''].add_unresolved(self.localdata, self.cache_data)
 
     def add_provided(self, provided):
         if 'world' in provided:
@@ -84,9 +83,9 @@ class Tinfoil(bb.tinfoil.Tinfoil):
             provided.extend(self.cache_data.universe_target)
 
         for item in provided:
-            self.taskdata.add_provider(self.localdata, self.cache_data, item)
+            self.taskdata[''].add_provider(self.localdata, self.cache_data, item)
 
-        self.taskdata.add_unresolved(self.localdata, self.cache_data)
+        self.taskdata[''].add_unresolved(self.localdata, self.cache_data)
 
     def rec_get_dependees(self, targetid, depth=0, seen=None):
         if seen is None:
@@ -99,41 +98,41 @@ class Tinfoil(bb.tinfoil.Tinfoil):
                 yield _id, _depth
 
     def get_dependees(self, targetid, seen):
-        dep_fnids = self.taskdata.get_dependees(targetid)
+        dep_fnids = self.taskdata[''].get_dependees(targetid)
         for dep_fnid in dep_fnids:
             if dep_fnid in seen:
                 continue
             seen.add(dep_fnid)
-            for target in self.taskdata.build_targets:
-                if dep_fnid in self.taskdata.build_targets[target]:
+            for target in self.taskdata[''].build_targets:
+                if dep_fnid in self.taskdata[''].build_targets[target]:
                     yield dep_fnid, target
 
     def get_buildid(self, target):
-        if not self.taskdata.have_build_target(target):
+        if not self.taskdata[''].have_build_target(target):
             if target in self.cooker.recipecache.ignored_dependencies:
                 return
 
-            reasons = self.taskdata.get_reasons(target)
+            reasons = self.taskdata[''].get_reasons(target)
             if reasons:
                 self.logger.error("No buildable '%s' recipe found:\n%s", target, "\n".join(reasons))
             else:
                 self.logger.error("No '%s' recipe found", target)
             return
         else:
-            return self.taskdata.getbuild_id(target)
+            return self.taskdata[''].getbuild_id(target)
 
     def target_filenames(self):
         """Return the filenames of all of taskdata's targets"""
         filenames = set()
 
-        for targetid in self.taskdata.build_targets:
-            fnid = self.taskdata.build_targets[targetid][0]
-            fn = self.taskdata.fn_index[fnid]
+        for targetid in self.taskdata[''].build_targets:
+            fnid = self.taskdata[''].build_targets[targetid][0]
+            fn = self.taskdata[''].fn_index[fnid]
             filenames.add(fn)
 
-        for targetid in self.taskdata.run_targets:
-            fnid = self.taskdata.run_targets[targetid][0]
-            fn = self.taskdata.fn_index[fnid]
+        for targetid in self.taskdata[''].run_targets:
+            fnid = self.taskdata[''].run_targets[targetid][0]
+            fn = self.taskdata[''].fn_index[fnid]
             filenames.add(fn)
 
         return filenames
@@ -173,20 +172,16 @@ class Tinfoil(bb.tinfoil.Tinfoil):
     def build_target_to_fn(self, target):
         """Given a target, prepare taskdata and return a filename"""
         self.prepare_taskdata([target])
-        targetid = self.get_buildid(target)
-        if targetid is None:
-            return
-        fnid = self.taskdata.build_targets[targetid][0]
-        fn = self.taskdata.fn_index[fnid]
+        if target in self.taskdata[''].build_targets and self.taskdata[''].build_targets[target]:
+            fn = self.taskdata[''].build_targets[target][0]
         return fn
 
     def parse_recipe_file(self, recipe_filename):
         """Given a recipe filename, do a full parse of it"""
+        bb_cache = bb.cache.NoCache(self.cooker.databuilder)
         appends = self.cooker.collection.get_file_appends(recipe_filename)
         try:
-            recipe_data = bb.cache.Cache.loadDataFull(recipe_filename,
-                                                      appends,
-                                                      self.config_data)
+            recipe_data = bb_cache.loadDataFull(recipe_filename, appends)
         except Exception:
             raise
         return recipe_data
@@ -267,7 +262,7 @@ import pickle
 
 def load_data(data_file):
     try:
-        fd = open(data_file, 'r')
+        fd = open(data_file, 'rb')
         data = pickle.load(fd)
         fd.close()
         return data
@@ -275,8 +270,8 @@ def load_data(data_file):
         return {}
 
 def dump_data(data, data_file):
-    fd = open(data_file, 'w')
-    pickle.dump(data, fd)
+    fd = open(data_file, 'wb')
+    pickle.dump(data, fd, protocol=2)
     fd.close()
 
 def extract_bitbake_metadata(recipes):
diff --git a/scripts/format_machine_list.py b/scripts/format_machine_list.py
index 778d4fc..2980e86 100755
--- a/scripts/format_machine_list.py
+++ b/scripts/format_machine_list.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 from doc_utils import tabularize
 import csv
 import os
diff --git a/scripts/generate-bugs-table.py b/scripts/generate-bugs-table.py
index e9829bd..13390a3 100755
--- a/scripts/generate-bugs-table.py
+++ b/scripts/generate-bugs-table.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 # Call this file on the command line with "-h" as argument to get all the
 # available options.
 
@@ -8,7 +8,7 @@ import os
 import re
 import sys
 import time
-import urllib2
+import urllib.request
 from doc_utils import tabularize
 
 BASE_DIRECTORY = os.path.dirname(os.path.realpath(__file__ + "/../"))
@@ -20,8 +20,8 @@ OPEN_BUGS_URL = "https://bugzilla.yoctoproject.org/buglist.cgi?quicksearch=meta-
 OPEN_BUGS_OUTPUT_FILE_PATH = BASE_DIRECTORY + "/release-notes/source/open_bugs.inc"
 
 def request_bug_list(url):
-    buffer = urllib2.urlopen(url)
-    csv_bug_list = buffer.read()
+    buffer = urllib.request.urlopen(url)
+    csv_bug_list = buffer.read().decode()
     buffer.close()
     return csv_bug_list
 
diff --git a/scripts/test-sheet-parser.py b/scripts/test-sheet-parser.py
index bb6f5da..967f476 100755
--- a/scripts/test-sheet-parser.py
+++ b/scripts/test-sheet-parser.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 # -*- coding: utf-8 -*-
 
 import os
-- 
2.1.4



More information about the meta-freescale mailing list