From: Simon Glass <simon.glass@canonical.com> Replace all string formatting with f-strings for better readability and consistency with modern Python style. Co-developed-by: Claude Opus 4.5 <noreply@anthropic.com> Signed-off-by: Simon Glass <simon.glass@canonical.com> --- tools/buildman/toolchain.py | 69 +++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py index 7ccb56a74aa..90f56813300 100644 --- a/tools/buildman/toolchain.py +++ b/tools/buildman/toolchain.py @@ -43,7 +43,7 @@ class MyHTMLParser(HTMLParser): HTMLParser.__init__(self) self.arch_link = None self.links = [] - self._re_arch = re.compile('[-_]%s-' % arch) + self._re_arch = re.compile(f'[-_]{arch}-') def handle_starttag(self, tag, attrs): """Handle a start tag in the HTML being parsed""" @@ -120,8 +120,7 @@ class Toolchain: if verbose: print('Tool chain test: ', end=' ') if self.ok: - print("OK, arch='%s', priority %d" % (self.arch, - self.priority)) + print(f"OK, arch='{self.arch}', priority {self.priority}") else: print('BAD') print(f"Command: {' '.join(cmd)}") @@ -188,7 +187,7 @@ class Toolchain: return ' '.join(args) return '' else: - raise ValueError('Unknown arg to GetEnvArgs (%d)' % which) + raise ValueError(f'Unknown arg to GetEnvArgs ({which})') def make_environment(self, full_path, env=None): """Returns an environment for using the toolchain. @@ -266,8 +265,8 @@ class Toolchain: List of arguments to pass to 'make' """ if self.override_toolchain: - return ['HOSTCC=%s' % self.override_toolchain, - 'CC=%s' % self.override_toolchain] + return [f'HOSTCC={self.override_toolchain}', + f'CC={self.override_toolchain}'] return [] @@ -306,11 +305,10 @@ class Toolchains: """ toolchains = bsettings.get_items('toolchain') if show_warning and not toolchains: - print(("Warning: No tool chains. Please run 'buildman " - "--fetch-arch all' to download all available toolchains, or " - "add a [toolchain] section to your buildman config file " - "%s. See buildman.rst for details" % - bsettings.config_fname)) + print(f"Warning: No tool chains. Please run 'buildman " + f"--fetch-arch all' to download all available toolchains, or " + f"add a [toolchain] section to your buildman config file " + f"{bsettings.config_fname}. See buildman.rst for details") paths = [] for name, value in toolchains: @@ -355,10 +353,10 @@ class Toolchains: if add_it: self.toolchains[toolchain.arch] = toolchain elif verbose: - print(("Toolchain '%s' at priority %d will be ignored because " - "another toolchain for arch '%s' has priority %d" % - (toolchain.gcc, toolchain.priority, toolchain.arch, - self.toolchains[toolchain.arch].priority))) + print(f"Toolchain '{toolchain.gcc}' at priority " + f"{toolchain.priority} will be ignored because another " + f"toolchain for arch '{toolchain.arch}' has priority " + f"{self.toolchains[toolchain.arch].priority}") def scan_path(self, path, verbose): """Scan a path for a valid toolchain @@ -373,9 +371,9 @@ class Toolchains: fnames = [] for subdir in ['.', 'bin', 'usr/bin']: dirname = os.path.join(path, subdir) - if verbose: print(" - looking in '%s'" % dirname) + if verbose: print(f" - looking in '{dirname}'") for fname in glob.glob(dirname + '/*gcc'): - if verbose: print(" - found '%s'" % fname) + if verbose: print(f" - found '{fname}'") fnames.append(fname) return fnames @@ -411,7 +409,8 @@ class Toolchains: if verbose: print('Scanning for tool chains') for name, value in self.prefixes: fname = os.path.expanduser(value) - if verbose: print(" - scanning prefix '%s'" % fname) + if verbose: + print(f" - scanning prefix '{fname}'") if os.path.exists(fname): self.add(fname, True, verbose, PRIORITY_FULL_PREFIX, name) continue @@ -429,7 +428,7 @@ class Toolchains: else: print(f'Error: {msg}') for path in self.paths: - if verbose: print(" - scanning path '%s'" % path) + if verbose: print(f" - scanning path '{path}'") fnames = self.scan_path(path, verbose) for fname in fnames: self.add(fname, True, verbose) @@ -437,11 +436,12 @@ class Toolchains: def list(self): """List out the selected toolchains for each architecture""" col = terminal.Color() - print(col.build(col.BLUE, 'List of available toolchains (%d):' % - len(self.toolchains))) + print(col.build( + col.BLUE, + f'List of available toolchains ({len(self.toolchains)}):')) if len(self.toolchains): for key, value in sorted(self.toolchains.items()): - print('%-10s: %s' % (key, value.gcc)) + print(f'{key:10}: {value.gcc}') else: print('None') @@ -461,7 +461,7 @@ class Toolchains: return self.toolchains[alias] if not arch in self.toolchains: - raise ValueError("No tool chain found for arch '%s'" % arch) + raise ValueError(f"No tool chain found for arch '{arch}'") return self.toolchains[arch] def resolve_references(self, var_dict, args): @@ -558,8 +558,8 @@ class Toolchains: versions = ['14.2.0', '13.2.0'] links = [] for version in versions: - url = '%s/%s/%s/' % (base, arch, version) - print('Checking: %s' % url) + url = f'{base}/{arch}/{version}/' + print(f'Checking: {url}') response = urllib.request.urlopen(url) html = tools.to_string(response.read()) parser = MyHTMLParser(fetch_arch) @@ -617,11 +617,11 @@ class Toolchains: """ # Fist get the URL for this architecture col = terminal.Color() - print(col.build(col.BLUE, "Downloading toolchain for arch '%s'" % arch)) + print(col.build(col.BLUE, f"Downloading toolchain for arch '{arch}'")) url = self.locate_arch_url(arch) if not url: - print(("Cannot find toolchain for arch '%s' - use 'list' to list" % - arch)) + print(f"Cannot find toolchain for arch '{arch}' - " + "use 'list' to list") return 2 home = os.environ['HOME'] dest = os.path.join(home, '.buildman-toolchains') @@ -632,7 +632,7 @@ class Toolchains: tarfile, tmpdir = tools.download(url, '.buildman') if not tarfile: return 1 - print(col.build(col.GREEN, 'Unpacking to: %s' % dest), end=' ') + print(col.build(col.GREEN, f'Unpacking to: {dest}'), end=' ') sys.stdout.flush() path = self.unpack(tarfile, dest) os.remove(tarfile) @@ -647,13 +647,14 @@ class Toolchains: print('Could not locate C compiler - fetch failed.') return 1 if len(compiler_fname_list) != 1: - print(col.build(col.RED, 'Warning, ambiguous toolchains: %s' % - ', '.join(compiler_fname_list))) + print(col.build(col.RED, + f"Warning, ambiguous toolchains: " + f"{', '.join(compiler_fname_list)}")) toolchain = Toolchain(compiler_fname_list[0], True, True) # Make sure that it will be found by buildman if not self.test_settings_has_path(dirpath): - print(("Adding 'download' to config file '%s'" % - bsettings.config_fname)) - bsettings.set_item('toolchain', 'download', '%s/*/*' % dest) + print(f"Adding 'download' to config file " + f"'{bsettings.config_fname}'") + bsettings.set_item('toolchain', 'download', f'{dest}/*/*') return 0 -- 2.43.0