From: claudius.heine.ext@siemens.com
To: isar-users@googlegroups.com
Cc: Harald Seiler <hws@denx.de>
Subject: [PATCH v4 3/6] Use modern python formatting
Date: Mon, 4 Mar 2019 14:07:58 +0100 [thread overview]
Message-ID: <20190304130801.20628-4-claudius.heine.ext@siemens.com> (raw)
In-Reply-To: <20190304130801.20628-1-claudius.heine.ext@siemens.com>
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 +++++--
.../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.20.1
next prev parent reply other threads:[~2019-03-04 13:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-04 13:07 [PATCH v4 0/6] Python refactoring claudius.heine.ext
2019-03-04 13:07 ` [PATCH v4 1/6] Remove all uses of subprocess.call(shell=True) claudius.heine.ext
2019-03-04 13:07 ` [PATCH v4 2/6] isar-bootstrap-helper: get_deb_host_arch: fix decoding claudius.heine.ext
2019-03-04 13:07 ` claudius.heine.ext [this message]
2019-03-04 13:07 ` [PATCH v4 4/6] image: Remove recursion in get_image_name claudius.heine.ext
2019-03-04 13:08 ` [PATCH v4 5/6] wic: Refactor fakeroot script claudius.heine.ext
2019-03-04 13:08 ` [PATCH v4 6/6] Fix python style claudius.heine.ext
2019-03-04 16:21 ` [PATCH v4 0/6] Python refactoring Claudius Heine
2019-03-11 10:10 ` Maxim Yu. Osipov
2019-03-11 12:22 ` Claudius Heine
2019-03-12 14:56 ` Claudius Heine
2019-03-12 15:26 ` Jan Kiszka
2019-03-12 15:34 ` Claudius Heine
2019-03-12 16:03 ` Jan Kiszka
2019-03-12 16:17 ` Claudius Heine
2019-03-12 22:36 ` Maxim Yu. Osipov
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=20190304130801.20628-4-claudius.heine.ext@siemens.com \
--to=claudius.heine.ext@siemens.com \
--cc=hws@denx.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