From b1046792d5aaf72c04bd88056d1a77ae0c31024d Mon Sep 17 00:00:00 2001 From: James Kent Date: Sat, 8 Dec 2018 09:14:22 -0600 Subject: [PATCH 1/3] [ENH] add option to include derivatives in BIDSDataGrabber --- nipype/interfaces/io.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/nipype/interfaces/io.py b/nipype/interfaces/io.py index 627d9ca7ac..2da158b96a 100644 --- a/nipype/interfaces/io.py +++ b/nipype/interfaces/io.py @@ -28,6 +28,7 @@ import tempfile from os.path import join, dirname from warnings import warn +from packaging import version import sqlite3 @@ -43,6 +44,7 @@ have_pybids = True try: import bids + pybids_ver = version.parse(bids.__version__) except ImportError: have_pybids = False @@ -2763,6 +2765,10 @@ class BIDSDataGrabberInputSpec(DynamicTraitedSpec): return_type = traits.Enum('file', 'namedtuple', usedefault=True) strict = traits.Bool(desc='Return only BIDS "proper" files (e.g., ' 'ignore derivatives/, sourcedata/, etc.)') + domains = traits.Either(None, traits.List(), + usedefault=True, + desc='(Optional): Pass list of domains ' + '(e.g. ["bids", "derivatives"]) for file searching.') class BIDSDataGrabber(IOBase): @@ -2841,7 +2847,20 @@ def _list_outputs(self): exclude = None if self.inputs.strict: exclude = ['derivatives/', 'code/', 'sourcedata/'] - layout = bidslayout.BIDSLayout(self.inputs.base_dir, exclude=exclude) + + if pybids_ver < version.parse('0.5'): + raise ImportError("pybids must be >= 0.5, " + "installed version: {ver}".format(ver=pybids_ver)) + elif pybids_ver >= version.parse('0.5') and pybids_ver < version.parse('0.6'): + layout = bidslayout.BIDSLayout(self.inputs.base_dir, + config=self.inputs.domains, + exclude=exclude) + else: + # pybids >= 0.6.0 + if self.inputs.domains is None: + self.inputs.domains = ['bids'] + layout = bidslayout.BIDSLayout((self.inputs.base_dir, self.inputs.domains), + exclude=exclude) # If infield is not given nm input value, silently ignore filters = {} From 521e91a80d2576d9c1b1cf95d1b191915b1ed1f3 Mon Sep 17 00:00:00 2001 From: James Kent Date: Sat, 8 Dec 2018 10:43:42 -0600 Subject: [PATCH 2/3] add auto test and fix whitespace --- nipype/interfaces/io.py | 4 ++-- nipype/interfaces/tests/test_auto_BIDSDataGrabber.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/nipype/interfaces/io.py b/nipype/interfaces/io.py index 2da158b96a..37cf0fabf4 100644 --- a/nipype/interfaces/io.py +++ b/nipype/interfaces/io.py @@ -2847,7 +2847,7 @@ def _list_outputs(self): exclude = None if self.inputs.strict: exclude = ['derivatives/', 'code/', 'sourcedata/'] - + if pybids_ver < version.parse('0.5'): raise ImportError("pybids must be >= 0.5, " "installed version: {ver}".format(ver=pybids_ver)) @@ -2859,7 +2859,7 @@ def _list_outputs(self): # pybids >= 0.6.0 if self.inputs.domains is None: self.inputs.domains = ['bids'] - layout = bidslayout.BIDSLayout((self.inputs.base_dir, self.inputs.domains), + layout = bidslayout.BIDSLayout((self.inputs.base_dir, self.inputs.domains), exclude=exclude) # If infield is not given nm input value, silently ignore diff --git a/nipype/interfaces/tests/test_auto_BIDSDataGrabber.py b/nipype/interfaces/tests/test_auto_BIDSDataGrabber.py index 8acdcc9787..99a81f675a 100644 --- a/nipype/interfaces/tests/test_auto_BIDSDataGrabber.py +++ b/nipype/interfaces/tests/test_auto_BIDSDataGrabber.py @@ -6,6 +6,7 @@ def test_BIDSDataGrabber_inputs(): input_map = dict( base_dir=dict(mandatory=True, ), + domains=dict(usedefault=True, ), output_query=dict(), raise_on_empty=dict(usedefault=True, ), return_type=dict(usedefault=True, ), From 90e2952f5913f1761f28e5866f963f26c9d7ce75 Mon Sep 17 00:00:00 2001 From: James Kent Date: Sat, 8 Dec 2018 19:14:23 -0600 Subject: [PATCH 3/3] fix indent --- nipype/interfaces/io.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nipype/interfaces/io.py b/nipype/interfaces/io.py index 9259e734e2..c72aab4a34 100644 --- a/nipype/interfaces/io.py +++ b/nipype/interfaces/io.py @@ -2820,7 +2820,7 @@ def _list_outputs(self): except ImportError: from bids.grabbids import BIDSLayout - pybids_ver = version.parse(bids.__version__) + pybids_ver = version.parse(bids.__version__) exclude = None if self.inputs.strict: exclude = ['derivatives/', 'code/', 'sourcedata/']