From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6657041487194226688 X-Received: by 2002:a17:906:f82:: with SMTP id q2mr10829ejj.11.1550496790432; Mon, 18 Feb 2019 05:33:10 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a50:cfc1:: with SMTP id i1ls3515519edk.7.gmail; Mon, 18 Feb 2019 05:33:10 -0800 (PST) X-Google-Smtp-Source: AHgI3IYO42J6olGGW0drrwfgt9pGh8Db4DODtgDc8Clny8V5KNS7sHNGwRWbyGDU2FGoTekdZMOG X-Received: by 2002:a50:ad94:: with SMTP id a20mr2840963edd.8.1550496789982; Mon, 18 Feb 2019 05:33:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550496789; cv=none; d=google.com; s=arc-20160816; b=SA6+DAB8SRj6TOIQtZ2ji3XDpTIbfCA/uTZsUSiNLUeMKdZ4MpEKU5dzXjCQGXiZ7X 1+j5MriE31nUlbnUO1j8PUi53fiTmrdzXqD077DKRnk8SLHiKbKn7eYljV7VvsSo4MHW 8epVsiF+CSWLyvdVR82CDfjocOGgMJqaq8ut7LL8e0QKaEBT7YS4eUBUoQpv1TFTyxg/ a6VAdY1nj8zsf1Iq0csseAcFI52/zDUTnOftyNUIPykP3upBPzfIQu8PDhdV1rE0ijGV Zwyg3QKBn+NgKaXef6qNyZA0uCrgorp6tozs64NhFJOWSZ/oHKTvMAvyL/AjdPm/16Zg 1KLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:to:from; bh=j67vMJIh4tVLV+Wbl6V1J1I/68H8nH4vlryqXdOT+WM=; b=VLV0mMoOfeRxh2h0PIHt5JLE9shbaBalu1L4/WRsz+UPAFxwtfaaSmTWunFpbNEBj1 CbEAoFgg0bdKo3O1XYzgqo3+Q8beazVkQcxgsCgwhjIUZUFZuZz4mPttX9BI8POPEF85 p4YGWEVmtoYtucOqAEsOSzDAqQ6ZZ3Gwz63ql3v/ryI5SRMjz5kEO4iWi9uPDVrk48nW 1BIU5Q4KxG/zKxZfW3AZiz8XRkdMmS3LrIU9xNwCFqqpaxo654RZw2PNZaZ4mOwEdzQ2 9fuL0UfZaCglI5mQZwTjs8n/dPglU07VYQ3gwlxiU9uL1ei+o2WGIEsgT379IoW8i7Dp DLxA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of mosipov@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=mosipov@ilbers.de Return-Path: Received: from shymkent.ilbers.de (shymkent.ilbers.de. [85.214.156.166]) by gmr-mx.google.com with ESMTPS id u9si762785edp.1.2019.02.18.05.33.09 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 18 Feb 2019 05:33:09 -0800 (PST) Received-SPF: pass (google.com: domain of mosipov@ilbers.de designates 85.214.156.166 as permitted sender) client-ip=85.214.156.166; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of mosipov@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=mosipov@ilbers.de Received: from azat.m.ilbers.de (host-80-81-17-52.static.customer.m-online.net [80.81.17.52]) (authenticated bits=0) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8) with ESMTPSA id x1IDWk2W014006 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 18 Feb 2019 14:33:07 +0100 From: "Maxim Yu. Osipov" To: isar-users@googlegroups.com Subject: [PATCH v3 2/5] Use modern python formatting Date: Mon, 18 Feb 2019 14:32:46 +0100 Message-Id: <20190218133246.19656-1-mosipov@ilbers.de> X-Mailer: git-send-email 2.11.0 X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-TUID: pbQ0XbG1g93c From: Harald Seiler 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 --- 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