public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: "Maxim Yu. Osipov" <mosipov@ilbers.de>
To: isar-users@googlegroups.com
Subject: [PATCH v3 2/5] Use modern python formatting
Date: Mon, 18 Feb 2019 14:32:46 +0100	[thread overview]
Message-ID: <20190218133246.19656-1-mosipov@ilbers.de> (raw)

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


                 reply	other threads:[~2019-02-18 13:33 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190218133246.19656-1-mosipov@ilbers.de \
    --to=mosipov@ilbers.de \
    --cc=isar-users@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox