From 4e4189deaa21fa4ffc4e9e1f9f9dc682e8d14977 Mon Sep 17 00:00:00 2001
From: Michiel Cottaar <MichielCottaar@gmail.com>
Date: Thu, 14 Feb 2019 09:33:02 +0000
Subject: [PATCH] BUG: don't allow variable to span more than one directory or
 file name

---
 fsl/utils/filetree/utils.py          | 2 ++
 tests/test_filetree/test_template.py | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/fsl/utils/filetree/utils.py b/fsl/utils/filetree/utils.py
index 4ad5f63af..e7dd4aad3 100644
--- a/fsl/utils/filetree/utils.py
+++ b/fsl/utils/filetree/utils.py
@@ -170,6 +170,8 @@ def extract_variables(template, filename, known_vars=None):
                     raise ValueError('Multiple values found for {}'.format(var))
             else:
                 extracted_value[var] = value
+        if any('/' in value for value in extracted_value.values()):
+            continue
         for name in find_variables(template):
             if name not in extracted_value:
                 extracted_value[name] = None
diff --git a/tests/test_filetree/test_template.py b/tests/test_filetree/test_template.py
index 96ecc18f0..c4042078d 100644
--- a/tests/test_filetree/test_template.py
+++ b/tests/test_filetree/test_template.py
@@ -21,3 +21,7 @@ def test_get_variables():
         utils.extract_variables('{var}[_{other_var}]_{var}', 'test_foo_bar')
     with pytest.raises(ValueError):
         utils.extract_variables('bar{var}[_{other_var}]_{var}', 'test')
+
+    assert {'subject': '01', 'session': 'A'} == utils.extract_variables('sub-{subject}/[ses-{session}]/T1w.nii.gz', 'sub-01/ses-A/T1w.nii.gz')
+    with pytest.raises(ValueError):
+        utils.extract_variables('sub-{subject}/[ses-{session}]/T1w.nii.gz', 'sub-01/other/T1w.nii.gz')
-- 
GitLab