Skip to content

Commit 485843d

Browse files
committed
create local copy of base list in unique_ordered_extend
1 parent c0662ae commit 485843d

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

easybuild/tools/utilities.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -223,20 +223,21 @@ def nub(list_):
223223
return [x for x in list_ if x not in seen and not seen_add(x)]
224224

225225

226-
def unique_ordered_extend(base, extra):
227-
"""Extend base list with elements of extra list keeping order and without duplicates"""
228-
if isinstance(extra, str):
229-
# avoid strings as they are iterables and generate wrong result without error
230-
raise EasyBuildError(f"given extra list is a string: {extra}")
226+
def unique_ordered_extend(base, affix):
227+
"""Extend base list with elements of affix list keeping order and without duplicates"""
228+
if isinstance(affix, str):
229+
# avoid extending with strings, as iterables generate wrong result without error
230+
raise EasyBuildError(f"given affix list is a string: {affix}")
231231

232232
try:
233-
base.extend(extra)
233+
ext_base = base.copy()
234+
ext_base.extend(affix)
234235
except TypeError as err:
235-
raise EasyBuildError(f"given extra list is not iterable: {extra}") from err
236+
raise EasyBuildError(f"given affix list is not iterable: {affix}") from err
236237
except AttributeError as err:
237238
raise EasyBuildError(f"given base cannot be extended: {base}") from err
238239

239-
return nub(base) # remove duplicates
240+
return nub(ext_base) # remove duplicates
240241

241242

242243
def get_class_for(modulepath, class_name):

test/framework/utilities_test.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,19 @@ def test_LooseVersion(self):
194194
def test_unique_ordered_extend(self):
195195
"""Test unique_ordered_list_append method"""
196196
base = ["potato", "tomato", "orange"]
197+
base_orig = base.copy()
197198

198199
reference = ["potato", "tomato", "orange", "apple"]
199200
self.assertEqual(tu.unique_ordered_extend(base, ["apple"]), reference)
200201
self.assertEqual(tu.unique_ordered_extend(base, ["apple", "apple"]), reference)
201-
self.assertEqual(tu.unique_ordered_extend(base, "apple"), reference)
202-
self.assertNotEqual(tu.unique_ordered_extend(base, "apple"), sorted(reference))
202+
self.assertNotEqual(tu.unique_ordered_extend(base, ["apple"]), sorted(reference))
203+
# original list should not be modified
204+
self.assertEqual(base, base_orig)
203205

204-
error_pattern = "given extra list is not iterable"
206+
error_pattern = "given affix list is a string"
207+
self.assertErrorRegex(EasyBuildError, error_pattern, tu.unique_ordered_extend, base, "apple")
208+
error_pattern = "given affix list is not iterable"
205209
self.assertErrorRegex(EasyBuildError, error_pattern, tu.unique_ordered_extend, base, 0)
206-
207210
base = "potato"
208211
error_pattern = "given base cannot be extended"
209212
self.assertErrorRegex(EasyBuildError, error_pattern, tu.unique_ordered_extend, base, reference)

0 commit comments

Comments
 (0)