From 7691c52d99cfcc202f794e3d3c752b300f1a76e6 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Sat, 2 May 2026 08:10:28 +0200 Subject: [PATCH 1/4] format extension names in module files with exts_formatter function --- easybuild/framework/easyblock.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index 04b10406d4..8c8a2c816d 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -2012,6 +2012,11 @@ def make_extension_list(self): else: exts_list.append((resolve_template(ext[0], self.cfg.template_values), resolve_template(ext[1], self.cfg.template_values))) + + formatter = self.cfg.get('exts_formatter') + if formatter: + exts_list = [(formatter(x), y) for (x, y) in exts_list] + return exts_list def prepare_for_extensions(self): From b18deb7f21eddc2776b9348f759f66e84fe0fb96 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Sun, 3 May 2026 10:34:58 +0200 Subject: [PATCH 2/4] add support for the unformatted list --- easybuild/framework/easyblock.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index 8c8a2c816d..4cb1dd841c 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -1991,7 +1991,7 @@ def make_extension_string(self, name_version_sep='-', ext_sep=', ', sort=True): exts_list = sorted(exts_list, key=str.lower) return ext_sep.join(exts_list) - def make_extension_list(self): + def make_extension_list(self, formatted=True): """ Return a list of extension names and their versions included in this installation @@ -2013,9 +2013,10 @@ def make_extension_list(self): exts_list.append((resolve_template(ext[0], self.cfg.template_values), resolve_template(ext[1], self.cfg.template_values))) - formatter = self.cfg.get('exts_formatter') - if formatter: - exts_list = [(formatter(x), y) for (x, y) in exts_list] + if formatted: + formatter = self.cfg.get('exts_formatter') + if formatter: + exts_list = [(formatter(x), y) for (x, y) in exts_list] return exts_list From 68f6bd7502ecc7ec9b45c0d2ab27438cdd06dd1d Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Thu, 25 Jun 2026 21:38:13 +0200 Subject: [PATCH 3/4] update docstring --- easybuild/framework/easyblock.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index c96b92c2d1..bb924506ec 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -1995,6 +1995,9 @@ def make_extension_list(self, formatted=True): Each entry should be a (name, version) tuple or just (name, ) if no version exists. Custom EasyBlocks may override this to add extensions that cannot be found automatically. + + :param formatted: boolean indicating whether to format the extension name. If True, format using + the function defined by the exts_formatter parameter. """ # Each extension in exts_list is either a string or a list/tuple with name, version as first entries # As name can be a templated value we must resolve templates From 610c21c0c2b20f327fa81644ba8f7059c821fbf4 Mon Sep 17 00:00:00 2001 From: Samuel Moors Date: Sat, 1 Aug 2026 18:25:27 +0200 Subject: [PATCH 4/4] raise error if exts_formatter is not a function --- easybuild/framework/easyblock.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index bb924506ec..d5e90b487c 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -1996,7 +1996,7 @@ def make_extension_list(self, formatted=True): Each entry should be a (name, version) tuple or just (name, ) if no version exists. Custom EasyBlocks may override this to add extensions that cannot be found automatically. - :param formatted: boolean indicating whether to format the extension name. If True, format using + :param formatted: boolean indicating whether the extension name should be formatted. If True, format using the function defined by the exts_formatter parameter. """ # Each extension in exts_list is either a string or a list/tuple with name, version as first entries @@ -2017,6 +2017,9 @@ def make_extension_list(self, formatted=True): if formatted: formatter = self.cfg.get('exts_formatter') if formatter: + if not callable(formatter): + raise EasyBuildError("Parameter exts_formatter should be a function that accepts the extension name" + "and returns the formatted name.") exts_list = [(formatter(x), y) for (x, y) in exts_list] return exts_list