public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
* [PATCH v3 2/5] Use modern python formatting
@ 2019-02-18 13:32 Maxim Yu. Osipov
  0 siblings, 0 replies; only message in thread
From: Maxim Yu. Osipov @ 2019-02-18 13:32 UTC (permalink / raw)
  To: isar-users

From: Harald Seiler <hws@denx.de>

The use of % for formatting is discouraged because it has side-
effects that are not immediately obvious.  This commit refactors
all uses of % to a better formatting style.

As f-Strings are not availible in in some python versions we support
(<3.6) the formatter of choice is .format() or manual concatenation
in cases where it is more concise.

This commit additionally refactors the showdata and listtasks tasks
to make better use of the new formatter code.

Signed-off-by: Harald Seiler <hws@denx.de>
---
 meta/classes/base.bbclass                          | 58 ++++++++++++++--------
 meta/classes/wic-img.bbclass                       | 21 +++++---
 .../recipes-core/isar-bootstrap/isar-bootstrap.inc | 12 ++---
 3 files changed, 58 insertions(+), 33 deletions(-)

diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass
index 1f415af..c9b9e9e 100644
--- a/meta/classes/base.bbclass
+++ b/meta/classes/base.bbclass
@@ -33,27 +33,35 @@ do_showdata[nostamp] = "1"
 python do_showdata() {
     for e in d.keys():
         if d.getVarFlag(e, 'python'):
-            bb.plain("\npython %s () {\n%s}\n" % (e, d.getVar(e, True)))
+            code = d.getVar(e, True)
+            if code.startswith("def"):
+                bb.plain("\n" + code + "\n")
+            else:
+                bb.plain(
+                    "\npython {name} () {{\n{code}}}\n".format(
+                        name=e, code=code
+                    )
+                )
 }
 
 # Derived from Open Embedded: openembedded-core/meta/classes/utility-tasks.bbclass
 addtask listtasks
 do_listtasks[nostamp] = "1"
 python do_listtasks() {
-    taskdescs = {}
+    tasks = {}
     maxlen = 0
     for e in d.keys():
         if d.getVarFlag(e, 'task'):
             maxlen = max(maxlen, len(e))
             if e.endswith('_setscene'):
-                desc = "%s (setscene version)" % (d.getVarFlag(e[:-9], 'doc') or '')
+                tasks[e] = (
+                    d.getVarFlag(e[:-9], 'doc') or ''
+                ) + " (setscene version)"
             else:
-                desc = d.getVarFlag(e, 'doc') or ''
-            taskdescs[e] = desc
+                tasks[e] = d.getVarFlag(e, 'doc') or ''
 
-    tasks = sorted(taskdescs.keys())
-    for taskname in tasks:
-        bb.plain("%s  %s" % (taskname.ljust(maxlen), taskdescs[taskname]))
+    for name, desc in sorted(tasks.items()):
+        bb.plain("{0:{len}}  {1}".format(name, desc, len=maxlen))
 }
 
 root_cleandirs() {
@@ -71,30 +79,40 @@ root_cleandirs() {
 
 python() {
     import re
+
     for e in d.keys():
         flags = d.getVarFlags(e)
         if flags and flags.get('task'):
             rcleandirs = flags.get('root_cleandirs')
             if rcleandirs:
                 tmpdir = os.path.normpath(d.getVar("TMPDIR", True))
-                rcleandirs = list(os.path.normpath(d.expand(i))
-                                  for i in rcleandirs.split())
+                rcleandirs = list(
+                    os.path.normpath(d.expand(i)) for i in rcleandirs.split()
+                )
 
                 for i in rcleandirs:
                     if not i.startswith(tmpdir):
-                        bb.fatal("root_cleandirs entry %s is not contained in "
-                                 "TMPDIR %s" % (i, tmpdir))
+                        bb.fatal(
+                            "root_cleandirs entry {} is not contained in TMPDIR {}".format(
+                                i, tmpdir
+                            )
+                        )
 
-                ws = re.match("^\s*", d.getVar(e, False)).group()
                 if flags.get('python'):
-                    d.prependVar(e, ws + "d.setVar('ROOT_CLEANDIRS_DIRS', '"
-                                       + " ".join(rcleandirs) + "')\n"
-                                  + ws + "bb.build.exec_func("
-                                       + "'root_cleandirs', d)\n")
+                    cleandir_code = (
+                        "{ws}d.setVar('ROOT_CLEANDIRS_DIRS', '{dirlist}')\n"
+                        "{ws}bb.build.exec_func('root_cleandirs', d)\n"
+                    )
                 else:
-                    d.prependVar(e, ws + "ROOT_CLEANDIRS_DIRS='"
-                                       + " ".join(rcleandirs) + "'\n"
-                                  + ws + "root_cleandirs\n")
+                    cleandir_code = (
+                        "{ws}ROOT_CLEANDIRS_DIRS='{dirlist}'\n"
+                        "{ws}root_cleandirs\n"
+                    )
+
+                ws = re.match(r"^\s*", d.getVar(e, False)).group()
+                d.prependVar(
+                    e, cleandir_code.format(ws=ws, dirlist=" ".join(rcleandirs))
+                )
 }
 
 # filter out all "apt://" URIs out of SRC_URI and stick them into SRC_APT
diff --git a/meta/classes/wic-img.bbclass b/meta/classes/wic-img.bbclass
index c9d90a9..14795a7 100644
--- a/meta/classes/wic-img.bbclass
+++ b/meta/classes/wic-img.bbclass
@@ -28,6 +28,8 @@ python do_write_wks_template () {
 }
 
 python () {
+    import itertools
+
     wks_full_path = None
 
     wks_file = d.getVar('WKS_FILE', True)
@@ -41,14 +43,21 @@ python () {
             wks_full_path = wks_file
     else:
         bbpaths = d.getVar('BBPATH', True).split(':')
+        corebase_paths = bbpaths
+
         corebase = d.getVar('COREBASE', True)
-        search_path = ':'.join('%s/wic' % p for p in bbpaths) + ':' + \
-            ':'.join('%s/scripts/lib/wic/canned-wks' % l \
-                     for l in (bbpaths + [corebase]))
+        if corebase is not None:
+            corebase_paths.append(corebase)
+
+        search_path = ":".join(itertools.chain(
+            (p + "/wic" for p in bbpaths),
+            (l + "/scripts/lib/wic/canned-wks"
+             for l in (corebase_paths)),
+        ))
         wks_full_path = bb.utils.which(search_path, wks_file)
 
     if not wks_full_path:
-        bb.fatal("WKS_FILE '%s' not found" % wks_file)
+        bb.fatal("WKS_FILE '{}' not found".format(wks_file))
 
     d.setVar('WKS_FULL_PATH', wks_full_path)
 
@@ -117,12 +126,12 @@ python do_rootfs_wicenv () {
         for var in wicvars.split():
             value = d.getVar(var, True)
             if value:
-                envf.write('%s="%s"\n' % (var, value.strip()))
+                envf.write('{}="{}"\n'.format(var, value.strip()))
 
     # this part is stolen from OE ./meta/recipes-core/meta/wic-tools.bb
     with open(os.path.join(outdir, "wic-tools.env"), 'w') as envf:
         for var in ('RECIPE_SYSROOT_NATIVE', 'STAGING_DATADIR', 'STAGING_LIBDIR'):
-            envf.write('%s="%s"\n' % (var, d.getVar(var, True).strip()))
+            envf.write('{}="{}"\n'.format(var, d.getVar(var, True).strip()))
 
 }
 
diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
index 234d339..5114714 100644
--- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
+++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
@@ -40,18 +40,16 @@ python () {
         d.setVar("DEBOOTSTRAP_KEYRING", "--keyring ${APTKEYRING}")
         for key in distro_apt_keys.split():
             url = urlparse(key)
-            filename = ''.join([wd, url.path])
-            d.appendVar("SRC_URI", " %s" % key)
-            d.appendVar("APTKEYFILES", " %s" % filename)
+            d.appendVar("SRC_URI", " " + key)
+            d.appendVar("APTKEYFILES", " " + wd + url.path)
     if bb.utils.to_boolean(d.getVar('ISAR_USE_CACHED_BASE_REPO')):
         own_pub_key = d.getVar("BASE_REPO_KEY", False)
         if own_pub_key:
             d.setVar("DEBOOTSTRAP_KEYRING", "--keyring ${APTKEYRING}")
             for key in own_pub_key.split():
                 url = urlparse(key)
-                filename = ''.join([wd, url.path])
-                d.appendVar("SRC_URI", " %s" % key)
-                d.appendVar("APTKEYFILES", " %s" % filename)
+                d.appendVar("SRC_URI", " " + key)
+                d.appendVar("APTKEYFILES", " " + wd + url.path)
 }
 
 def aggregate_files(d, file_list, file_out):
@@ -170,7 +168,7 @@ def get_distro_suite(d, is_host):
 def get_distro_components_argument(d, is_host):
     components = get_distro_primary_source_entry(d, is_host)[2]
     if components and components.strip():
-        return "--components=%s" % ",".join(components.split())
+        return "--components=" + ",".join(components.split())
     else:
         return ""
 
-- 
2.11.0


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-02-18 13:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-18 13:32 [PATCH v3 2/5] Use modern python formatting Maxim Yu. Osipov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox