diff --git a/fsl/utils/filetree/filetree.py b/fsl/utils/filetree/filetree.py index e86f93c040c71afa367dcfe63ef2e8f9dd102dba..82fd137e9719ae659c9418aa15c0e1b0650dd00f 100644 --- a/fsl/utils/filetree/filetree.py +++ b/fsl/utils/filetree/filetree.py @@ -190,11 +190,14 @@ class FileTree(object): Creates a new FileTree with updated variables :param variables: new values for the variables - Setting variables to None will force that variable to be empty (useful for non-optional variables) + Setting a variable to None will cause the variable to be unset :return: New FileTree with same templates for directory names and filenames, but updated variables """ new_tree = deepcopy(self) new_tree.variables.update(variables) + for key, value in variables.items(): + if value is None: + del new_tree.variables[key] return new_tree def extract_variables(self, short_name: str, filename: str) -> Dict[str, str]: diff --git a/tests/test_filetree/test_read.py b/tests/test_filetree/test_read.py index b27984477218cd69f757199948865c2a06e6f8d1..40ffde22478a500a7df9613690e96552adb27701 100644 --- a/tests/test_filetree/test_read.py +++ b/tests/test_filetree/test_read.py @@ -77,8 +77,8 @@ def test_custom_tree(): assert len(tree.get_all('sub_file', glob_vars='all')) == 2 assert len(tree.get_all('sub_file')) == 1 assert len(tree.update(opt=None).get_all('sub_file')) == 1 - assert len(tree.update(opt=None).get_all('sub_file', glob_vars=['opt'])) == 1 - assert len(tree.update(opt=None).get_all('sub_file', glob_vars='all')) == 1 + assert len(tree.update(opt=None).get_all('sub_file', glob_vars=['opt'])) == 2 + assert len(tree.update(opt=None).get_all('sub_file', glob_vars='all')) == 2 for fn, settings in zip(tree.get_all('sub_file', glob_vars='all'), tree.get_all_vars('sub_file', glob_vars='all')):