Skip to content

Commit 2fd30ae

Browse files
authored
Merge pull request easybuilders#4726 from boegel/expect_resolved_template_values
add support for temporarily disabling requirement that all template values must resolve via `EasyConfig.expect_resolved_template_values`
2 parents d336035 + 2d49e8f commit 2fd30ae

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

easybuild/framework/easyconfig/easyconfig.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,10 @@ def __init__(self, path, extra_options=None, build_specs=None, validate=True, hi
428428
:param local_var_naming_check: mode to use when checking if local variables use the recommended naming scheme
429429
"""
430430
self.template_values = None
431-
self.enable_templating = True # a boolean to control templating
431+
# a boolean to control templating, can be (temporarily) disabled in easyblocks
432+
self.enable_templating = True
433+
# boolean to control whether all template values must be resolvable, can be (temporarily) disabled in easyblocks
434+
self.expect_resolved_template_values = True
432435

433436
self.log = fancylogger.getLogger(self.__class__.__name__, fname=False)
434437

@@ -1773,7 +1776,7 @@ def resolve_template(self, value):
17731776
"""Resolve all templates in the given value using this easyconfig"""
17741777
if not self.template_values:
17751778
self.generate_template_values()
1776-
return resolve_template(value, self.template_values)
1779+
return resolve_template(value, self.template_values, expect_resolved=self.expect_resolved_template_values)
17771780

17781781
@handle_deprecated_or_replaced_easyconfig_parameters
17791782
def __contains__(self, key):

test/framework/easyconfig.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,6 +1289,7 @@ def test_ec_method_resolve_template(self):
12891289
homepage = "http://example.com"
12901290
description = "test easyconfig %(name)s version %(version_major)s"
12911291
toolchain = SYSTEM
1292+
installopts = "PREFIX=%(installdir)s"
12921293
""")
12931294
self.prep()
12941295
ec = EasyConfig(self.eb_file, validate=False)
@@ -1302,6 +1303,22 @@ def test_ec_method_resolve_template(self):
13021303
self.assertIn('%', description, 'Description needs a template for the next test')
13031304
self.assertEqual(ec.resolve_template(description), ec['description'])
13041305

1306+
val = "PREFIX=%(installdir)s"
1307+
1308+
# by default unresolved template value triggers an error being raised
1309+
error_pattern = "Failed to resolve all templates"
1310+
self.assertErrorRegex(EasyBuildError, error_pattern, ec.resolve_template, val)
1311+
self.assertErrorRegex(EasyBuildError, error_pattern, ec.get, 'installopts')
1312+
1313+
# this can be (temporarily) disabled via expect_resolved_template_values in EasyConfig instance
1314+
ec.expect_resolved_template_values = False
1315+
self.assertEqual(ec.resolve_template(val), val)
1316+
self.assertEqual(ec['installopts'], val)
1317+
1318+
ec.expect_resolved_template_values = True
1319+
self.assertErrorRegex(EasyBuildError, error_pattern, ec.resolve_template, val)
1320+
self.assertErrorRegex(EasyBuildError, error_pattern, ec.get, 'installopts')
1321+
13051322
def test_templating_cuda_toolchain(self):
13061323
"""Test templates via toolchain component, like setting %(cudaver)s with fosscuda toolchain."""
13071324

0 commit comments

Comments
 (0)