Skip to content

Commit b3bcb19

Browse files
authored
Merge pull request #4360 from Flamefire/dependency_names
add `EasyConfig.dependency_names`
2 parents bbfd3a7 + 8c9b09a commit b3bcb19

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

easybuild/framework/easyconfig/easyconfig.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,15 @@ def dependencies(self, build_only=False):
11391139

11401140
return retained_deps
11411141

1142+
def dependency_names(self, build_only=False):
1143+
"""
1144+
Return a set of names of all (direct) dependencies after filtering.
1145+
Iterable builddependencies are flattened when not iterating.
1146+
1147+
:param build_only: only return build dependencies, discard others
1148+
"""
1149+
return {dep['name'] for dep in self.dependencies(build_only=build_only) if dep['name']}
1150+
11421151
def builddependencies(self):
11431152
"""
11441153
Return a flat list of the parsed build dependencies

test/framework/easyconfig.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,9 @@ def test_dependency(self):
301301
self.assertEqual(det_full_ec_version(first), '1.1-GCC-4.6.3')
302302
self.assertEqual(det_full_ec_version(second), '2.2-GCC-4.6.3')
303303

304+
self.assertEqual(eb.dependency_names(), {'first', 'second', 'foo', 'bar'})
304305
# same tests for builddependencies
306+
self.assertEqual(eb.dependency_names(build_only=True), {'first', 'second'})
305307
first = eb.builddependencies()[0]
306308
second = eb.builddependencies()[1]
307309

@@ -354,6 +356,7 @@ def test_false_dep_version(self):
354356
self.assertEqual(len(deps), 2)
355357
self.assertEqual(deps[0]['name'], 'second_build')
356358
self.assertEqual(deps[1]['name'], 'first')
359+
self.assertEqual(eb.dependency_names(), {'first', 'second_build'})
357360

358361
# more realistic example: only filter dep for POWER
359362
self.contents = '\n'.join([
@@ -377,12 +380,14 @@ def test_false_dep_version(self):
377380
deps = eb.dependencies()
378381
self.assertEqual(len(deps), 1)
379382
self.assertEqual(deps[0]['name'], 'not_on_power')
383+
self.assertEqual(eb.dependency_names(), {'not_on_power'})
380384

381385
# only power, dependency gets filtered
382386
st.get_cpu_architecture = lambda: POWER
383387
eb = EasyConfig(self.eb_file)
384388
deps = eb.dependencies()
385389
self.assertEqual(deps, [])
390+
self.assertEqual(eb.dependency_names(), set())
386391

387392
def test_extra_options(self):
388393
""" extra_options should allow other variables to be stored """
@@ -1636,18 +1641,15 @@ def test_filter_deps(self):
16361641
test_ecs_dir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'easyconfigs', 'test_ecs')
16371642
ec_file = os.path.join(test_ecs_dir, 'f', 'foss', 'foss-2018a.eb')
16381643
ec = EasyConfig(ec_file)
1639-
deps = sorted([dep['name'] for dep in ec.dependencies()])
1640-
self.assertEqual(deps, ['FFTW', 'GCC', 'OpenBLAS', 'OpenMPI', 'ScaLAPACK'])
1644+
self.assertEqual(ec.dependency_names(), {'FFTW', 'GCC', 'OpenBLAS', 'OpenMPI', 'ScaLAPACK'})
16411645

16421646
# test filtering multiple deps
16431647
init_config(build_options={'filter_deps': ['FFTW', 'ScaLAPACK']})
1644-
deps = sorted([dep['name'] for dep in ec.dependencies()])
1645-
self.assertEqual(deps, ['GCC', 'OpenBLAS', 'OpenMPI'])
1648+
self.assertEqual(ec.dependency_names(), {'GCC', 'OpenBLAS', 'OpenMPI'})
16461649

16471650
# test filtering of non-existing dep
16481651
init_config(build_options={'filter_deps': ['zlib']})
1649-
deps = sorted([dep['name'] for dep in ec.dependencies()])
1650-
self.assertEqual(deps, ['FFTW', 'GCC', 'OpenBLAS', 'OpenMPI', 'ScaLAPACK'])
1652+
self.assertEqual(ec.dependency_names(), {'FFTW', 'GCC', 'OpenBLAS', 'OpenMPI', 'ScaLAPACK'})
16511653

16521654
# test parsing of value passed to --filter-deps
16531655
opts = init_config(args=[])
@@ -1681,6 +1683,7 @@ def test_filter_deps(self):
16811683
init_config(build_options=build_options)
16821684
ec = EasyConfig(ec_file, validate=False)
16831685
self.assertEqual(ec.dependencies(), [])
1686+
self.assertEqual(ec.dependency_names(), set())
16841687

16851688
def test_replaced_easyconfig_parameters(self):
16861689
"""Test handling of replaced easyconfig parameters."""
@@ -1869,6 +1872,9 @@ def test_external_dependencies(self):
18691872
}
18701873
self.assertEqual(deps[7]['external_module_metadata'], cray_netcdf_metadata)
18711874

1875+
# External module names are omitted
1876+
self.assertEqual(ec.dependency_names(), {'intel'})
1877+
18721878
# provide file with partial metadata for some external modules;
18731879
# metadata obtained from probing modules should be added to it...
18741880
metadata = os.path.join(self.test_prefix, 'external_modules_metadata.cfg')
@@ -1897,6 +1903,7 @@ def test_external_dependencies(self):
18971903
deps = ec.dependencies()
18981904

18991905
self.assertEqual(len(deps), 8)
1906+
self.assertEqual(ec.dependency_names(), {'intel'})
19001907

19011908
for idx in [0, 1, 2, 6]:
19021909
self.assertEqual(deps[idx]['external_module_metadata'], {})

0 commit comments

Comments
 (0)